Was ist, wenn Sie überprüfen möchten, ob die Integer-Werte gleich sind? Anstatt "==" zu verwenden, verwenden Sie zum Vergleich natürlich die Methode "equals". Denn in Java bedeutet "==", zu überprüfen, ob die Instanzen, auf die in der Referenz verwiesen wird, identisch sind, und zu überprüfen, ob die Werte der Instanzen mit der Methode "equals" gleich sind. Deshalb.
Was ist, wenn Sie es wagen, "==" zu verwenden, um die Werte von Integer-Instanzen zu vergleichen? Siehe den Code unten.
Sample.java
public class Sample1 {
public static void main(String[] args) {
Integer i1 = 100;
Integer i2 = 100;
Integer i3 = 1000;
Integer i4 = 1000;
System.out.println("100=100: " + (i1 == i2));
System.out.println("1000=1000: " + (i3 == i4));
}
}
In diesem Programm werden "100" und "1000" mit "==" verglichen, aber die Ergebnisse werden wie folgt angezeigt.
100=100: true
1000=1000: false
Das Ergebnis war je nach den verglichenen Zahlen unterschiedlich. Warum macht das einen Unterschied?
** Wie Sie in den Kommentaren sehen können, liegt dies daran, dass bei IntegerCache Integer-Instanzen zwischengespeichert sind. Da es nichts mit dem konstanten Pool zu tun hat, werden wir es korrigieren. ** ** **
~~ Um dies zu erklären, muss zunächst der "konstante Pool" erklärt werden, der einer der Bereiche von Java ist. ~~
Instanzen von ~~ Integer können ihren internen Status nicht ändern. Es ist unveränderlich. Daher können Sie die Instanzen wiederverwenden, und es ist sinnlos, jedes Mal eine Instanz zu erstellen. Daher erstellt Java VM diese Instanzen im Voraus, speichert sie in einem bestimmten Bereich im Speicher und verwendet sie bei Bedarf. Dieser Bereich wird als "konstanter Pool" bezeichnet. ~~
~~ Ebenso gibt es neben Integer noch andere Dinge, die diesem konstanten Pool unterliegen. Beispielsweise ist eine fest im Quellcode geschriebene Zeichenfolge auch ein Ziel, für das diesem konstanten Pool eine Instanz zugewiesen ist. ~~
~~ Wie oben erwähnt, wird die Integer-Instanz im Voraus im Konstantenpool vorbereitet, und das Programm verwendet diese Instanz. Warum macht der obige Code einen Unterschied zwischen "100" und "1000"? Dies liegt daran, dass sich nicht alle Integer-Instanzen in einem konstanten Pool befinden. Standardmäßig werden Integer-Instanzen im Bereich von -128 bis 127 als Ziel ausgewählt, und Instanzen außerhalb dieses Bereichs werden nicht im Konstantenpool bereitgestellt. ~~
~~ Mit anderen Worten, da im obigen Code die aus dem Konstantenpool erhaltene Instanz für "100" verwendet wird, war die Instanz, auf die jede Referenz zeigt, dieselbe. Für "1000" wurde jedoch jedes Mal eine Instanz erstellt, da die Instanz nicht im konstanten Pool vorbereitet wurde, und die Instanz, auf die in jeder Referenz verwiesen wird, war unterschiedlich, und als Ergebnis wurde das Ergebnis des Vergleichs mit "==" falsch. Es bedeutet, dass es war. ~~
Als kleine Geschichte von Java habe ich im Training für Neulinge darüber gesprochen und es war gut, also habe ich es geschrieben.
Recommended Posts