Heim >Java >JavaErste Schritte >Der Unterschied zwischen int und integer in Java
1. Java-Basisdatentypen und ihre Kapselungsklassen
Java Zu den Datentypen gehören Basisdatentypen und Referenzdatentypen. Um die Verarbeitung grundlegender Datentypen als Objekte zu erleichtern, führt Java Kapselungsklassen ein, die den Basisdatentypen entsprechen. Die int-Kapselungsklasse ist beispielsweise Integer.
Online-Lehrvideo-Sharing: Java-Lehrvideo
2. Automatisches Entpacken und Packen von Java
1 . Automatisches Boxen
Autoboxing ist eigentlich die Umwandlung grundlegender Datentypen in Referenzdatentypen (Objekte)
Automatisches Unboxing
Automatisches Unboxing konvertiert tatsächlich Referenzdatentypen in Basisdatentypen
Der Code lautet wie folgt:
public static void main(String[] args) { Integer a = 1;//这里就用到了自动装箱;等同于Integer a = new Integer(1); int b = a - 1;//对象不能直接进行计算,所以这里有自动拆箱的操作,将a对象转换成基本数据类型,然后-1 System.out.println(a); System.out.println(b); }
Druckergebnis:
1 0
3 Der Unterschied zwischen int und Integer
Aus dem Obigen können wir den Unterschied zwischen int und Integer erkennen:
int ist der Basisdatentyp und Integer ist der Referenzdatentyp; Der Standardwert von int ist 0 und der Standardwert von Integer ist null.
Der Typ int speichert Werte direkt, und Integer muss das Objekt instanziieren und auf die Adresse des Objekts verweisen.
Apropos, glauben Sie, dass es tatsächlich einige detaillierte Unterschiede zwischen ihnen gibt: wie folgt
public static void main(String[] args) { Integer a = new Integer(1); Integer b = new Integer(1); int c = 1; int d = 1; Integer e = 1; Integer f = 1; Integer g = 130; Integer h = 130; Integer i = new Integer(130); int j = 130; }
1: a == b? Unsinn, definitiv nicht gleich. Die Adressen der beiden neuen Objekte sind unterschiedlich.
2: c == d? Auch das ist Unsinn, die Werte der Basisdatentypen müssen gleich sein.
3: Die Schlüsselfrage ist jetzt e == f? g == h?
Die Antwort lautet: e == f;
Warum passiert das? Da Integer g = 130 beim Kompilieren von ava in Integer.valueOf (130) kompiliert wird, können Sie dies durch Dekompilieren der Klassendatei erkennen. Aus dem Integer-Quellcode kann geschlossen werden, dass die Methode Integer.valueOf() die Ganzzahl zwischen den Werten -128~127 zwischenspeichert und keine neue erstellt, also e==f; größer als 127 oder kleiner als – Bei 128 wird ein neues erstellt, also g != h.
Die valueOf-Methode von Integer lautet wie folgt: public static Integer valueOf(int i) {
//IntegerCache.low == -128 ;IntegerCache.high == 127
//当数值大于-128小于127时,进行缓存;否则重新new一个。
if (i >= IntegerCache.low && i <= IntegerCache.high)
return IntegerCache.cache[i + (-IntegerCache.low)];
return new Integer(i);
}
4: Ist c == e, ist i == j?
Die Antworten sind alle gleich. Denn beim Vergleich gekapselter Klassen mit Basisdatentypen entpackt Java diese automatisch und vergleicht dann, ob die Werte gleich sind.
Zusammenfassung:
1 Sie sind alle gekapselte Klassen und werden alle von neuen abgeleitet, daher sind sie definitiv nicht gleich. Weil die Speicheradressen der Objekte unterschiedlich sind.
2. Sie sind alle gekapselte Klassen und nicht neu. Wenn der Wert zwischen -128 und 127 liegt, ist er gleich.
3. Wenn die gekapselte Klasse und der Basistyp verglichen werden, sind sie gleich, solange die Werte gleich sind, andernfalls sind sie nicht gleich. Weil es beim Vergleich der gekapselten Klasse mit dem Basisdatentyp einen automatischen Unboxing-Vorgang gibt.
4. Wenn die Werte gleich sind, sind sie andernfalls nicht gleich.
Weitere verwandte Tutorials finden Sie unter:
Erste Schritte mit JavaDas obige ist der detaillierte Inhalt vonDer Unterschied zwischen int und integer in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!