Primitivtypen und Wrapperklassen (Java): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
 
Zeile 3: Zeile 3:
 
Primitivdatentypen werden "Call by Value" übergeben, d.h.:
 
Primitivdatentypen werden "Call by Value" übergeben, d.h.:
  
<code=java>public class CallByValue
+
<syntaxhighlight lang="java">public class CallByValue
 
{
 
{
 
   public static void main (String[] args)
 
   public static void main (String[] args)
Zeile 15: Zeile 15:
 
     a++; //Die alte Variable wird nicht verändert
 
     a++; //Die alte Variable wird nicht verändert
 
   }
 
   }
}</code=java>
+
}</syntaxhighlight>
 
==Wrapperklassen==
 
==Wrapperklassen==
 
Es gibt aber auch die [[Klasse|Klassen]] Byte, Short, Integer, Long, Double, Float, Character und Boolean im Paket java.lang. Sie haben immer eine Primitivvariable des jeweiligen Typs als Membervariable. Über diese Klassen können auch Strings in andere Datentypen umgewandelt werden. Man kann sich die Klasse vereinfacht so vorstellen:
 
Es gibt aber auch die [[Klasse|Klassen]] Byte, Short, Integer, Long, Double, Float, Character und Boolean im Paket java.lang. Sie haben immer eine Primitivvariable des jeweiligen Typs als Membervariable. Über diese Klassen können auch Strings in andere Datentypen umgewandelt werden. Man kann sich die Klasse vereinfacht so vorstellen:
<code=java>public class Integer
+
<syntaxhighlight lang="java">public class Integer
 
{
 
{
 
   private int i;
 
   private int i;
Zeile 29: Zeile 29:
 
     return i;
 
     return i;
 
   }
 
   }
}</code=java>
+
}</syntaxhighlight>
 
Da diese Klassen Objekte sind, wird das Objekt übergeben, es wird nicht kopiert. Leider haben sie keine Möglichkeit, den int-Wert zu verändern, deshalb benutze ich zur Verdeutlichung eine eigene Klasse:
 
Da diese Klassen Objekte sind, wird das Objekt übergeben, es wird nicht kopiert. Leider haben sie keine Möglichkeit, den int-Wert zu verändern, deshalb benutze ich zur Verdeutlichung eine eigene Klasse:
<code=java>public class CallByReference //Ist eigentlich kein Call by Reference, weil die Referenz by Value übergeben wird
+
<syntaxhighlight lang="java">public class CallByReference //Ist eigentlich kein Call by Reference, weil die Referenz by Value übergeben wird
 
{
 
{
 
   public static void main (String[] args)
 
   public static void main (String[] args)
Zeile 61: Zeile 61:
 
     this.i = i;
 
     this.i = i;
 
   }
 
   }
}</code=java>
+
}</syntaxhighlight>
  
 
Übrigens: die Klassen haben auch immer eine native statische innere Klasse mit dem Namen TYPE, der in der [[Reflection|Reflections-API]] den Primitivtyp repräsentiert.
 
Übrigens: die Klassen haben auch immer eine native statische innere Klasse mit dem Namen TYPE, der in der [[Reflection|Reflections-API]] den Primitivtyp repräsentiert.

Aktuelle Version vom 16. März 2018, 13:11 Uhr

Primitivtypen

Die Typen byte, short, int, long, double, float, boolean und char sind als einzige Ausnahmen in Java nicht objektorientiert, sondern sogenannte primitive Datentypen. Primitivdatentypen werden "Call by Value" übergeben, d.h.:

public class CallByValue
{
  public static void main (String[] args)
  {
    int i = 5;
    inc (i);
    System.out.println (i);  //Ausgabe: 5
  }
  private static void inc (int a)
  {
    a++; //Die alte Variable wird nicht verändert
  }
}

Wrapperklassen

Es gibt aber auch die Klassen Byte, Short, Integer, Long, Double, Float, Character und Boolean im Paket java.lang. Sie haben immer eine Primitivvariable des jeweiligen Typs als Membervariable. Über diese Klassen können auch Strings in andere Datentypen umgewandelt werden. Man kann sich die Klasse vereinfacht so vorstellen:

public class Integer
{
  private int i;
  public Integer (int i)
  {
    this.i = i;
  }
  public int intValue()
  {
    return i;
  }
}

Da diese Klassen Objekte sind, wird das Objekt übergeben, es wird nicht kopiert. Leider haben sie keine Möglichkeit, den int-Wert zu verändern, deshalb benutze ich zur Verdeutlichung eine eigene Klasse:

public class CallByReference //Ist eigentlich kein Call by Reference, weil die Referenz by Value übergeben wird
{
  public static void main (String[] args)
  {
    int i = 5;
    Integer integ = new Integer (i);
    inc (integ);
    i = integ.intValue();
    System.out.println (i); //Ausgabe: 6
  }
  public static void inc (Integer i)
  {
    i.setValue (i.intValue() + 1); //Das Objekt wird verändert
  }
}
class Integer //Die Hilfsklasse
{
  private int i;
  public Integer (int i)
  {
    this.i = i;
  }
  public int intValue()
  {
    return i;
  }
  public void setValue (int i)
  {
    this.i = i;
  }
}

Übrigens: die Klassen haben auch immer eine native statische innere Klasse mit dem Namen TYPE, der in der Reflections-API den Primitivtyp repräsentiert.


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.