Informationen zur Beziehung zwischen dem Java String Equality Operator (==) und der Initialisierung. Anfänger

Für Java-Anfänger, anstatt die Bedeutung des Gleichheitsoperators (==) für String zu betrachten, "ob sie den gleichen Wert haben" Ich denke, einer der Punkte des Lernens ist zu sehen, "ob die Referenzen gleich sind".

Test1.java


public static void main(String[] args) {
	String str1 = "100";// ⓵
	String str2 = new String("100"); // ⓶
		 System.out.println(str1 == str2); //Falsch werden.
	 }
 }

Ich verstehe, dass es zu diesem Zeitpunkt falsch sein wird. String kann jedoch entweder mit ⓵ oder ⓶ initialisiert werden. Wann werden die Referenzen gleich sein? Zum Beispiel:

Test2.java


public static void main(String[] args) {
	String str1 = "100";
	String str2 = "100";
		 System.out.println(str1 == str2); //Wahr werden.
	 }
 }

Im obigen Beispiel ist es wahr. Nun, ich dachte, dass es falsch wäre, weil ich zwei verschiedene Referenztypvariablen gemacht habe. Es scheint, dass str1 und str2 zu diesem Zeitpunkt dieselbe Referenz betrachten, da der Gleichheitsoperator "ob die Referenz dieselbe ist" betrachtet.

Ich fragte mich, was das bedeutete. Nachdem ich herumgegangen war, kam folgendes heraus. Referenz: Informieren Sie sich über die Auswirkungen auf die Leistung bei Verwendung von String # intern ()

Der Punkt in String ist, wenn es eine Intern () -Methode gibt, und wenn Sie diese verwenden, gibt es ein String-Objekt mit derselben Zeichenfolge. Es scheint, dass alle Referenzen verfügbar sind. Dies reduziert den verschwendeten Speicher. Es ist ineffizient, Objekte einzeln zu erstellen, obwohl sie denselben Wert haben.

Passiert das nicht in Test2.java? Das heißt, die Intern () -Methode wird beim Initialisieren automatisch angewendet. Auf diese Weise verschwenden Sie keinen Speicher. Was passiert in den folgenden Fällen?

Test3.java


 public static void main(String[] args) {
	String str1 = new String("100");
	String str2 = new String("100");
		 System.out.println(str1 == str2);
	 }
 }

In diesem Fall scheint es falsch zu sein. Die Sache ist, dass beim Initialisieren mit new ~~ die Intern () -Methode nicht angewendet wird und nur als new bezeichnet wird. Es scheint also, dass Sie ein neues Objekt erstellen.

Zusammenfassung, -Wenn str1 = "100" und str2 = "100", ist das Referenzziel dasselbe.

Übrigens habe ich auch Folgendes ausgeführt, um herauszufinden, ob dieses Ereignis im Referenztyp auftritt oder ob der String etwas Besonderes ist.

Test4.java


 public static void main(String[] args) {
	Integer int1 = 100;
	Integer int2 = 100;
		 System.out.println(str1 == str2);
	 }
 }

Es war wahr. Im Fall eines Referenztyps können Sie, sofern Sie nicht neu schreiben, grundsätzlich sagen, dass Sie denselben Referenzpunkt betrachten.

Recommended Posts

Informationen zur Beziehung zwischen dem Java String Equality Operator (==) und der Initialisierung. Anfänger
Informationen zur Beziehung zwischen HTTP-Methoden, Aktionen und CRUD
[Java] Über String und StringBuilder
Denken Sie über die Unterschiede zwischen Funktionen und Methoden nach (in Java)
Die Beziehung zwischen strenger Java-Datumsprüfung und Sommerzeit
Beziehung zwischen Kotlin- und Java-Zugriffsmodifikatoren
[Für Anfänger] Unterschied zwischen Java und Kotlin
Über den Unterschied zwischen irb und pry
Interpretieren Sie die Beziehung zwischen Java-Methoden und Argumenten in biochemischen Formeln
[Java] Verstehe den Unterschied zwischen List und Set
[Rails / Active Record] Über den Unterschied zwischen create und create!
[Java] Der verwirrende Teil von String und StringBuilder
Fassen Sie die Unterschiede zwischen C # - und Java-Schrift zusammen
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
[Java] Vergleich von Zeichenketten und && und ||
Unterschiede zwischen Klassen und Instanzen in Ruby
Über den ternären Operator
[Java Silver] Informationen zur Initialisierung
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
Informationen zur Java String-Klasse
Informationen zum Laden und Initialisieren von Klassen beim Start der JVM
Überprüfung der Beziehung zwischen dem Docker-Image und dem Container
Java-Anfänger fassten das Verhalten von Array und ArrayList kurz zusammen
[Für Anfänger] Über die von Java Gold erklärte JavaScript-Syntax
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Studiere Java # 2 (\ mark and operator)
[Java] Unterschied zwischen == und gleich
Beziehung zwischen Controller und Ansicht
Ungefähr der gleiche und der gleiche Wert
Beziehung zwischen Paket und Klasse
Über Java-Paket und Import
Unterschiede zwischen get und gets.chomp (außer Zeilenumbrüchen)
[Ruby] Beziehung zwischen Elternklasse und Kinderklasse. Beziehung zwischen Klasse und Instanz.
[Java] Einführungsstruktur Klassendefinition Beziehung zwischen Klasse und Instanz Methodendefinitionsformat
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
[Java] So konvertieren Sie vom Typ String in den Pfadtyp und erhalten den Pfad
Informationen zu statischen und nicht statischen Java-Methoden
Unterschied zwischen == Operator und Methode gleich
[Java] Unterschied zwischen Hashmap und HashTable
Deklaration, Initialisierung und Typen von Java-Variablen
Über Biocontainer fastqc und Java
Java für Anfänger, Ausdrücke und Operatoren 1
Informationen zu den Methoden equals () und hashcode ()
Unterschied zwischen dem Operator == und der Methode eqals
[Java-Anfänger] Über Abstraktion und Schnittstelle
Java für Anfänger, Ausdrücke und Operatoren 2
[Java-Anfänger] == Operator und Gleiche Methode
Informationen zur aktuellen Entwicklungsumgebung (Java 8)
[JAVA] Unterschied zwischen Abstract und Interface