Dieser Artikel stellt hauptsächlich den Beispielcode des Ganzzahlwertbereichs in JAVA vor. Freunde, die ihn benötigen, können darauf verweisen.
Ohne weitere Umschweife werde ich den Code direkt für Sie veröffentlichen Der Code lautet wie folgt:
package com.test; public class Test { public static void main(String []args) { Integer a = 100;//此处若使用new,则==值必为false Integer b = 100; System.out.println(a==b);//true Integer c = 150; Integer d = 150; System.out.println(c==d);//false } }
Was ist der Grund dafür?
1. Beim Kompilieren von Java wird Integer a = 100; in -> Integer a = Integer.valueOf(100);
2 übersetzt. Beim Vergleich handelt es sich immer noch um einen Vergleich von Objekten
3. Im JDK-Quellcode
public static Integer valueOf(int i) { final int offset = 128; if (i >= -128 && i <= 127) { // must cache return IntegerCache.cache[i + offset]; //符合值范围时候,进入也创建好的静态IntergerCache,i+offset的值表示去取cache数组中那个下标的值 } return new Integer(i); //当不符合-128 127值范围时候。记住用的:new,开辟新的内存空间,不属于IntergerCache管理区 }
Und
private static class IntegerCache { private IntegerCache(){} static final Integer cache[] = new Integer[-(-128) + 127 + 1]; //开辟-128到127的内存区。有0的位置哦 static { for(int i = 0; i < cache.length; i++) cache[i] = new Integer(i - 128); //为内存区的数组每个对象赋值 } }
Hier ist die Java-Initialisierung zur Verbesserung Effizienz Es wird ein ganzzahliges Objekt zwischen -128 und 127 erhalten, sodass die Zuweisung das gleiche Objekt innerhalb dieses Bereichs ist.
Weiteren Satz hinzufügen
Integer a = 100; a++; //这边a++是新创建了一个对象,不是以前的对象。 public static void main(String []args) { Integer a = 100; Integer b = a;//此时b指针指向值为100的堆地址 即a的堆地址,a==b成立 a++;//此时a指向的值发生变化为101,a指针指向101的堆地址。而b任然指向100 System.out.println(a==b);//false }
Zusammenfassung
Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Bereichs von Ganzzahlwerten in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!