[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist

Referenzstandortvergleich und Wertevergleich

Vergleichsmethode Inhalt
equals Speicherbereichsvergleich
== Wertevergleich

Programmbeispiel

public class MyApp {
		
	public static void main(String[] args) {

		String s1 = "ab"; //Speicherbereich speichern
		String s2 = "ab"; //Speicherbereich speichern (gleicher Bereich wie oben)

		if(s1.equals(s2)) { //Vergleichen Sie, ob der Inhalt gleich ist
			System.out.println("same1 equals");
		}

		if(s1 == s2) { //Vergleich grundlegender Datentypen
			System.out.println("same2 ==");
		}
		//String-Objekt generieren (mit der Methode equals)
		String ss1 = new String("ab"); //Speicherung des Speicherbereichs
		String ss2 = new String("ab"); //Speicherung des Speicherbereichs (erstellen Sie einen weiteren Bereich von oben)

		//Vergleich grundlegender Datentypen
		if(ss1 == ss2) { //Da der Speicherbereich verglichen wird, ist er falsch und wird nicht ausgeführt.
			System.out.println("same3 ==Objekt");
		}
		//Vergleich der Dateninhalte
		if(ss1.equals(ss2)) {
			System.out.println("same4 ist gleich Objekt"); //Wird ausgeführt, weil der Speicherbereich unterschiedlich ist, der Wert jedoch gleich ist
		}
	}
}

Ausführungsbeispiel

same1 equals
same2 ==
same4 ist gleich Objekt

Die Zeichenkette hat eine Gewohnheit

In der Zeichenfolge, die ursprünglich ein Referenztyp ist, wird die Position des Speicherbereichs des Referenzziels in der Variablen gespeichert.

Und im Beispiel wird s1 und s2 dieselbe Zeichenfolge "ab" zugewiesen, aber die Position des Speicherbereichs wird in s1 eingegeben, und s2 wird dieselbe Zeichenfolge zugewiesen, also derselbe Speicher Es scheint, dass der Standort des Gebiets enthalten sein wird. Mit anderen Worten

String s1 = "ab";
String s2 = s1;

Gleiche Bedeutung wie? werden.

Wenn ich es versuche

same1 equals
same2 ==
same4 ist gleich Objekt

Was passiert, wenn der Referenzort identisch ist und der Referenzwert in beiden Fällen zurückgegeben wird? Ändert das Ändern nur des Werts von s1 beide?

String s1 = "ab";
String s2 = s1;
s2 = "cd";

Was passiert, wenn Sie ... leicht zu verstehen

		System.out.println("s1: " + s1);
		System.out.println("s2: " + s2);

Und Renn.

s1: ab
s2: cd
same4 ist gleich Objekt

Nur s2 wurde geändert und spiegelt sich nicht in s1 wider.

Apropos, die Zeichenfolge verhält sich genauso wie der Basisdatentyp und genauso wie der Int-Typ. .. ..

Bedeutet dies, dass dasselbe Referenzziel erstellt wird, während die Werte identisch sind, und ein neuer Speicherbereich erstellt wird, wenn die Werte aktualisiert werden?

Es ist kompliziert, aber ich habe es versucht und wieder verstanden.

Wenn es sich um ein Array handelt, werden beide Werte aktualisiert. Bewertung Bewertung!

Recommended Posts

[Java] Unterschied zwischen gleich und == in einer Zeichenfolge, die ein Referenztyp ist
[Java] Unterschied zwischen == und gleich
Unterschied zwischen primitivem Typ und Referenztyp
[Java] Unterschied zwischen der Zuweisung der Basistypvariablen und der Zuordnung der Referenztypvariablen
Ist die Kurzschlussauswertung wirklich schnell? Unterschied zwischen && und & in Java
Unterschied zwischen final und Immutable in Java
Jetzt im dritten Jahr ist das Missverständnis, das ich bemerkt habe, der Unterschied zwischen der Gleichheitsmethode und ==
Unterschied zwischen int und Integer in Java
Unterschied zwischen next () und nextLine () in Java Scanner
[Java] Unterschied zwischen statischem final und final in Mitgliedsvariablen
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
[Java] Vorsichtsmaßnahmen beim Referenzieren in einer übergeordneten Klasse und beim Instanziieren in einer untergeordneten Klasse
Memorandum Nr. 4 "Holen Sie sich eine Zeichenkette und dekorieren Sie sie" [Java]
Unterschied zwischen Element 0, Null und leerem Zeichen (Check-in-Liste)
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Unterschied zwischen == Operator und Methode gleich
[Java] Unterschied zwischen Hashmap und HashTable
[JAVA] Unterschied zwischen Abstract und Interface
Was ist eine Referenztypvariable?
[Java] Unterschied zwischen Array und ArrayList
Verstehe gleich und hashCode in Java
[Java] Unterschied zwischen Closeable und AutoCloseable
[Java] Unterschied zwischen StringBuffer und StringBuilder
[Java] Unterschied zwischen Länge, Länge () und Größe ()
Was ist der Unterschied zwischen einem Webserver und einem Anwendungsserver?
[Java] Was ist der Unterschied zwischen Form, Entität und dto? [Bohne]
[Java] Teilen Sie eine Zeichenfolge durch ein angegebenes Zeichen
So testen Sie eine private Methode und verspotten sie teilweise in Java
In Bezug auf den Vergleich der Zeichenfolgentypäquivalenz in Java
[Leicht verständliche Erklärung! ] Konvertierung des Referenztyptyps in Java
Ein Hinweis zu den Unterschieden zwischen Schnittstellen und abstrakten Klassen in Java
Unterschied zwischen pop () und peek () im Stapel
[Für Anfänger] Unterschied zwischen Java und Kotlin
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Unterschied zwischen getText () und getAttribute () von Selen
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Unterschied zwischen EMPTY_ELEMENTDATA und DEFAULTCAPACITY_EMPTY_ELEMENTDATA in ArrayList
Überprüfung von "seltsamem Java" und Java-Wissen, das in Java Bronze oft vergessen wird
[Java] Unterschied zwischen Intstream-Bereich und rangeClosed
Verstehen Sie den Unterschied zwischen int und Integer und BigInteger in Java und float und double
[Java] Eclipse-Verknüpfungen, die verbessert werden können, indem Sie wissen, wann Sie zwischen Quellcode in einem Projekt hin und her wechseln
[Java] Verstehe den Unterschied zwischen List und Set
Lesen Sie eine Zeichenfolge in einer PDF-Datei mit Java
Der in Java 10 eingeführte Schnittpunkttyp ist erstaunlich (?)
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Eine Bat-Datei, die Java in Windows verwendet
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
Unterscheiden Sie in Java zwischen positiven und negativen Zahlen
[Java] Unterschied zwischen "endgültiger Variable" und "unveränderlichem Objekt"
[Java] Wenn Sie eine Zeichenfolge in die switch-Anweisung einfügen, müssen Sie sie zu einem konstanten Ausdruck machen
[Java] Beim Zuweisen einer Zeichenfolge zu einer Zeichenvariablen ist ein Fehler mit inkompatiblen Typen aufgetreten.
Gibt es Ende 2017 einen Leistungsunterschied zwischen Oracle JDK und OpenJDK?