In Java gibt es zwei Grundtypen in der JVM . 1) Primitive Typen und 2) Referenztypen. int ist ein primitiver Typ und Integer ist ein Klassentyp (der eine Art Referenztyp ist).
Primitive Werte teilen den Status nicht mit anderen primitiven Werten. Eine Variable, deren Typ ein primitiver Typ ist, enthält immer einen primitiven Wert dieses Typs.
int aNumber = 4;
int anotherNum = aNumber;
aNumber += 6;
System.out.println(anotherNum); // Prints 4
Ein Objekt ist eine dynamisch erstellte Klasseninstanz oder ein Array. Die Referenzwerte (oft nur Referenzen) sind Zeiger auf diese Objekte und eine spezielle Nullreferenz, die sich auf kein Objekt bezieht. Es kann viele Verweise auf dasselbe Objekt geben.
Integer aNumber = Integer.valueOf(4);
Integer anotherNumber = aNumber; // anotherNumber references the
// same object as aNumber
Auch in Java wird alles als Wert übergeben. Bei Objekten ist der übergebene Wert die Referenz auf das Objekt. Ein weiterer Unterschied zwischen int und Integer in Java besteht darin, wie sie in Methodenaufrufen übergeben werden. Zum Beispiel in
public int add(int a, int b) {
return a + b;
}
final int two = 2;
int sum = add(1, two);
Die Variable zwei wird als primitiver ganzzahliger Typ 2 übergeben
public int add(Integer a, Integer b) {
return a.intValue() + b.intValue();
}
final Integer two = Integer.valueOf(2);
int sum = add(Integer.valueOf(1), two);
Die Variable zwei wird als Referenz auf ein Objekt übergeben, das den ganzzahligen Wert 2 enthält.
@ WolfmanDragon: Pass by Reference würde so funktionieren:
public void increment(int x) {
x = x + 1;
}
int a = 1;
increment(a);
// a is now 2
Wenn das Inkrement aufgerufen wird, übergibt es eine Referenz (einen Zeiger) an die Variable a . Und die Inkrementfunktion ändert direkt die Variable a .
Und für Objekttypen würde es wie folgt funktionieren:
public void increment(Integer x) {
x = Integer.valueOf(x.intValue() + 1);
}
Integer a = Integer.valueOf(1);
increment(a);
// a is now 2
Sehen Sie jetzt den Unterschied?