Heim > Java > javaLernprogramm > Hauptteil

Integer.valueOf、 Integer.parseInt 、 neue Ganzzahl

巴扎黑
Freigeben: 2017-06-26 10:41:09
Original
1582 Leute haben es durchsucht

Sehen Sie sich zunächst die Ergebnisse unten an

1.System.out.println(127==127); //true , int type compare2.System.out.println(128==128); //true , int type compare3.System.out.println(new Integer(127) == new Integer(127)); //false, object compare4.System.out.println(Integer.parseInt("128")==Integer.parseInt("128")); //true, int type compare5.System.out.println(Integer.valueOf("127")==Integer.valueOf("127")); //true ,object compare, because IntegerCache return a same object6.System.out.println(Integer.valueOf("128")==Integer.valueOf("128")); //false ,object compare, because number beyond the IntegerCache7.System.out.println(Integer.parseInt("128")==Integer.valueOf("128")); //true , int type compare
Nach dem Login kopieren

Erklärung

Beim Vergleich von int-Ganzzahlkonstanten ist == ein Wertvergleich. 1,2 gibt also true zurück. 1, 2 sind Wertvergleiche.

new Integer() erstellt jedes Mal ein neues Integer-Objekt, sodass 3 false zurückgibt. 3 ist der Objektvergleich.

Integer.parseInt erstellt jedes Mal eine int-Konstante, sodass 4 true zurückgibt. 4 ist ein Wertevergleich.

Integer.valueOf gibt ein Integer-Objekt zurück. Standardmäßig gibt es ein im Cache vorhandenes Objekt zwischen -128 und 127 zurück, sodass 5 true und 6 false zurückgibt. 5 und 6 sind Objektvergleiche.

Der siebte ist etwas Besonderes, es ist ein Vergleich zwischen int und Integer. Das Ergebnis ist ein Wertvergleich und gibt true zurück.

Zusammenfassung

Bestimmen Sie beim Ganzzahlvergleich zunächst, ob es sich um einen Wertvergleich oder einen Objektvergleich handelt. Der Wertvergleich gibt definitiv „true“ zurück Wert, es ist ein Wertevergleich. Der Objektvergleich hängt davon ab, wie das Objekt erstellt wird. Wenn Sie die neue Integer-Methode verwenden, wird jedes Mal ein neues Objekt generiert. Wenn es sich um die Integer.valueOf-Methode handelt, achten Sie darauf, ob der Wert falsch ist Der Bereich liegt zwischen -128 und 127. Wenn dies der Fall ist, sind die konstruierten Objekte mit demselben Wert dasselbe Objekt. == gibt nach dem Vergleich „true“ zurück, andernfalls wird „false“ zurückgegeben.

Für den Wertvergleich == gibt es also kein Problem. Für den Ganzzahlvergleich ist es am besten, den Objektinhalt mit der Gleichheitsmethode zu vergleichen null.

Wissenserweiterung

Analysieren Sie den Integer.valueOf-Quellcode

1. Die von uns aufgerufene Integer.valueOf-Methode ruft zuerst parseInt auf, um ihn zu konvertieren in int-Typwert umwandeln und dann seine eigene überladene Methode anpassen

public static Integer valueOf(String s) throws NumberFormatException {return Integer.valueOf(parseInt(s, 10));
    }
Nach dem Login kopieren

2.Integer.valueOf überladene Methode bestimmt basierend auf der Größe des Werts i, ob eine Ganzzahl abgerufen werden soll Objekt aus dem Cache

 public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
    }
Nach dem Login kopieren

3. Der Konstruktor von Integer ist sehr einfach

  public Integer(int value) {this.value = value;
    }
Nach dem Login kopieren

4 interne Klasse von Integer, drei Attribute (ein zwischengespeichertes Integer-Array + eine Reihe von Cache-Bereichen)

private static class IntegerCache {static final int low = -128;static final int high;static final Integer cache[];static {// high value may be configured by property(最大值可配置)int h = 127;
            String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); //读取VM参数if (integerCacheHighPropValue != null) {try {int i = parseInt(integerCacheHighPropValue); //配置值转换成int数值i = Math.max(i, 127);  //和127比较,取较大者// Maximum array size is Integer.MAX_VALUE(控制缓存数组的大小,最大为整型的最大值,这样一来,h值就必须小于整型最大值,因为要存 -128~0这129个数嘛)h = Math.min(i, Integer.MAX_VALUE - (-low) -1); //实际就是 h=Math.min(i,Integer.MAX_VALUE-129),正整数能缓存的个数} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.                }
            }
            high = h;

            cache = new Integer[(high - low) + 1]; //构造缓存数组int j = low;for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);  //将一些int常量缓存进Integer对象数组缓存中去// range [-128, 127] must be interned (JLS7 5.1.7)assert IntegerCache.high >= 127; //如果小于127,抛异常}private IntegerCache() {}
    }
Nach dem Login kopieren

Nachdem Sie den obigen Integer.valueOf-Quellcode gelesen haben, werden Sie feststellen, dass dies die Standardeinstellung ist Integer-Cache Der int-Konstantenpool ist konfigurierbar und fügt Folgendes hinzu: -Djava.lang.Integer.IntegerCache.high=200

Intellij IDEA die Laufkonfiguration.

Das obige ist der detaillierte Inhalt vonInteger.valueOf、 Integer.parseInt 、 neue Ganzzahl. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!