Heim > Java > javaLernprogramm > Der Unterschied zwischen Integer und Int und die detaillierte Erklärung der Methode integer.values()

Der Unterschied zwischen Integer und Int und die detaillierte Erklärung der Methode integer.values()

巴扎黑
Freigeben: 2017-06-26 10:20:01
Original
1572 Leute haben es durchsucht

Erklärung: Bei diesem Artikel handelt es sich um einen Nachdruck des Bloggers. Die Originaladresse finden Sie am Ende des Artikels.

Wissenspunkt 1: Der Unterschied zwischen Ganzzahl und int

/*
* int sind die 8 bereitgestellten primitiven Typen von Java Einer der Datentypen. Java stellt Wrapper-Klassen für jeden primitiven Typ bereit. Integer ist die von Java bereitgestellte Wrapper-Klasse für int. Der Standardwert von int ist 0,
* und der Standardwert von Integer ist null
* Das heißt, Integer kann den Unterschied zwischen nicht zugewiesenem Wert und Wert unterscheiden 0, int Es ist unmöglich, die nicht zugewiesene Situation auszudrücken. Wenn Sie beispielsweise den Unterschied zwischen der Nichtteilnahme an der Prüfung und dem Prüfungsergebnis von 0
* ausdrücken möchten, können Sie nur Integer
*. In der JSP-Entwicklung ist der Standardwert von Integer null. Wenn also der EL-Ausdruck zur Anzeige im Textfeld verwendet wird, ist der Wert eine leere Zeichenfolge, und der Standardwert von int ist 0, wenn also der EL-Ausdruck verwendet wird Um es im Textfeld
* anzuzeigen, ist das Ergebnis 0, sodass int nicht als Formulardatentyp der Webebene geeignet ist.
* Wenn OID im Ruhezustand als Integer-Typ definiert ist, kann Hibernate basierend darauf bestimmen, ob ein Objekt temporär ist, ob sein Wert null ist
* , wenn das Da OID als int-Typ definiert ist, müssen Sie in der HBM-Zuordnungsdatei auch das Attribut „Nicht gespeicherter Wert“ auf 0 setzen.
* Darüber hinaus bietet Integer mehrere ganzzahlbezogene Operationsmethoden, z. B. die Konvertierung einer Zeichenfolge in eine Ganzzahl, und definiert auch Konstanten, die den Maximal- und Minimalwert von Ganzzahlen darstellen.

*/

Wissenspunkt 2: Detaillierte Erklärung der Methode integer.values()

Warum kommt das erste Urteil zurück true und das zweite Urteil kehrt zurück false? Gibt es einen Unterschied zwischen 127 und 128, den ich nicht kenne? (Natürlich, außer dass 127 kleiner ist als 128...)

Außerdem: Warum gibt das dritte Urteil ? trueIch habe die Antworten auf eine andere verwandte Frage gelesen, weiß aber immer noch nicht, wann sie wahr sind und warum das zweite Urteil zutrifft
. false

Antwort Nr. 1:

zeigt ein ungewöhnliches Verhalten. Integer.valueOf(String)

gibt ein valueOf (Ganzzahl)-Objekt zurück. Wenn die verarbeitete Zeichenfolge zwischen Integer und -128 (einschließlich Grenzen) liegt, wird das zurückgegebene Objekt vorab zwischengespeichert. Aus diesem Grund gibt der Aufruf in der ersten Zeile 127-true127

zurück. Dieses ganzzahlige Objekt wird zwischengespeichert (dasselbe Objekt wird also zweimal von

zurückgegeben) – der Aufruf in der zweiten Zeile gibt Da valueOf nicht zwischengespeichert ist, generiert jeder Aufruf ein neues Ganzzahlobjekt false128, sodass die beiden Ganzzahlobjekte

unterschiedliche Objekte sind.

128

Es ist wichtig

zu wissen, dass Sie im obigen Vergleich tatsächlich die von zurückgegebene Objektreferenz vergleichen. Wenn Sie also das ganzzahlige Objekt außerhalb des Caches vergleichen, ist Gleichheit Das Urteil wird nicht zurückgegeben , selbst wenn Sie integer.valueOftrue bestehen und der Wert von

gleich ist, ist es nutzlos. (Genau wie

in der zweiten Zeile. Wenn Sie möchten, dass dieses Urteil valueOf zurückgibt, müssen Sie die Methode Integer.valueOf(128)==Integer.valueOf(128)) verwenden. trueequals()

gibt kein ganzzahliges Objekt, sondern ein Geben Sie das Grundelement ein. In der dritten Zeile des Urteils lautet der tatsächliche Vergleich

, parseInt()int, also muss es gleich sein >trueSprechen wir über einen kleinen Unterschied im dritten Vergleich, der sein Ergebnis vom zweiten Vergleich unterscheidet: 128 == 128

Eine Unboxing-Konvertierung (eine Konvertierung während des Vergleichs, die das Objekt in eine Referenz auf sein entsprechendes Atom umwandelt Typ) kommt im Vergleich in der dritten Zeile vor, da der Vergleichsoperator

verwendet und auf beiden Seiten des Gleichheitszeichens ein

vorhanden ist Das auf der rechten Seite des Gleichheitszeichens zurückgegebene Objekt wird weiter in einen

-Wert umgewandelt, bevor es dem

-Wert auf der linken Seite entspricht. Nach Abschluss der Konvertierung werden also tatsächlich zwei atomare Werte verglichen Ganzzahlige Werte. Diese Konvertierung entspricht genau dem, was Sie beim Vergleich zweier Atomtypen erwarten würden, sodass Sie am Ende ==

vergleichen. Antwort Nr. 2: Das

int Die IntegerInteger-Klasse verfügt über einen statischen Cache, der 256 spezielle int-Objekte speichert – jedes entspricht einem Wert zwischen `-128 und 127

Mit diesem Konzept können Sie den Unterschied zwischen den oben genannten drei Zeilen erkennen Code.

128

1128
new Integer(123);

显示创建了一个新的Integer对象。

1
1
Integer.parseInt("123");
Integer.parseInt( "123");

int

解析完字符串后返回一个
值.
1
Integer.valueOf("123");
1
Integer.valueOf("123" code>);

-128

127

这种情况比其他的要更复杂一些.首先进行了字符串解析,然后如果解析的值位于Integer()

之间,就会从静态缓存中返回对象.如果超出了这个范围,就会调用

方法并将解析的值作为参数传入,得到一个新的对象.
1
Integer.valueOf("127")==Integer.valueOf("127");
现在,让我们看一下问题中的3个表达式.

tbody>
1true
Integer.valueOf("127")==Integer.valueOf("127");Integertrue
上面的表达式返回
1
Integer.valueOf("128")==Integer.valueOf("128");
,因为的值从静态缓存中取了2次,表达式返回了对象与自己比较的结果.因为只有一个Integer对象,所以返回结果为。
1
Integer.valueOf("128")==Integer.valueOf("128"); code>

Der obige Ausdruck gibt false zurück, da für 128 kein statischer Puffer vorhanden ist. Jedes Mal, wenn Gleichheit festgestellt wird, werden auf beiden Seiten der Gleichung neue Integer-Objekte erstellt. Da die beiden Integer-Objekte unterschiedlich sind, gibt == nur

zurück, wenn beide Seiten der Gleichung

true dasselbe Objekt darstellen. Daher gibt die obige Gleichung false zurück.

tr>
1
1
Integer.parseInt("128")==Integer.valueOf("128");
Integer.parseInt("128")==Integer .valueOf("128");

int128Der obige Ausdruck vergleicht den ursprünglichen Integer-Wert int auf der linken Seite mit dem neu erstellten Integer-Objekt auf der rechten Seite. Da der Vergleich zwischen

und

jedoch bedeutungslos ist, entpackt Java automatisch Integerintint vor dem Vergleich, sodass das Endergebnis der Wert des Vergleichs zwischen 128 und true ist. Da

sich selbst entspricht, wird zurückgegeben.

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen Integer und Int und die detaillierte Erklärung der Methode integer.values(). 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