Erklärung: Bei diesem Artikel handelt es sich um einen Nachdruck des Bloggers. Die Originaladresse finden Sie am Ende des Artikels.
/*
* 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.
*/
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 ? true
Ich 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
-true
127
zurückgegeben) – der Aufruf in der zweiten Zeile gibt Da valueOf
nicht zwischengespeichert ist, generiert jeder Aufruf ein neues Ganzzahlobjekt false
128
, sodass die beiden Ganzzahlobjekte
128
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.valueOf
true
bestehen und der Wert von
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. true
equals()
, parseInt()
int
, also muss es gleich sein >true
Sprechen wir über einen kleinen Unterschied im dritten Vergleich, der sein Ergebnis vom zweiten Vergleich unterscheidet: 128 == 128
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 ==
int
Die Integer
Integer
-Klasse verfügt über einen statischen Cache, der 256 spezielle int
-Objekte speichert – jedes entspricht einem Wert zwischen `-128 und 127
128
1 128
| new Integer(123);
|
显示创建了一个新的Integer
对象。
1
|
Integer.parseInt( "123" );
|
int
1 |
Integer.valueOf( "123" );
|
1 |
Integer.valueOf( "123" code>
|
127
这种情况比其他的要更复杂一些.首先进行了字符串解析,然后如果解析的值位于Integer()
和
1 |
Integer.valueOf( "127" )==Integer.valueOf( "127" );
|
1 true
|
Integer.valueOf( "127" )==Integer.valueOf(
|
1 |
Integer.valueOf( "128" )==Integer.valueOf( "128" );
|
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
true
dasselbe Objekt darstellen. Daher gibt die obige Gleichung false
zurück.
1
| Integer.parseInt( "128" )==Integer .valueOf( "128" );
| tr>
int
128
Der 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
jedoch bedeutungslos ist, entpackt Java automatisch Integerint
int
vor dem Vergleich, sodass das Endergebnis der Wert des Vergleichs zwischen 128
und true
ist. Da
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!