2016-07-14 17 views
-4

Ich fragte mich, wie Java "denkt, wenn ich es so etwas gebe: " foo "==" foo ". Weil, als ich versuchte, den Code unten auszuführen, die Ergebnisse .?. suprised mich ein wenigVergleichen von Zeichenfolgen in Java mit "==" -Operator

String a = "foo"; 
String b = "foo"; 
System.out.println(a == b); // true 
String c = "foo"; 
String d = "fo"; 
d += "o"; 
System.out.println(c == d); // false 

Warum also in beiden Fällen I "foo" == "foo" bin Vergleich

+1

Geben Sie einfach den Titel Ihrer Frage in Google ein und Sie haben die Antwort. Bitte recherchieren Sie, bevor Sie eine Frage stellen. –

+0

Unterschied zwischen equals() und "==": http://Stackoverflow.com/a/1643079/6395535 – Arthur

+0

Versuchen Sie, ein paar der Antworten dort zu lesen. Wie dieser. http://StackOverflow.com/a/15760319/2308683 –

Antwort

0

In Java == sollte für zwei Zwecke verwendet werden:

  • determin ne, wenn die Werte von zwei Grundtypen (int, double, boolean, char, etc.) sind gleich
  • , um zu bestimmen, ob zwei Objekte der gleichen Instanz

Strings sind Objekte sind. So gibt == nur für zwei Zeichenfolgen True zurück, wenn beide Zeichenfolgenvariablen auf dieselbe Zeichenfolgeninstanz verweisen.

(a und b in Ihrem Beispiel sind eigentlich die gleiche Instanz wegen String Internierung)

Wenn Sie die Werte zweier Objekte vergleichen wollen, Sie wollen (a) versuchen, die equals() Methode und (b) Stellen Sie sicher, dass das Objekt eine benutzerdefinierte equals() Methode definiert und Sie wissen, wie es funktioniert. Wenn das Objekt keine benutzerdefinierte equals() implementiert, verhält es sich einfach genauso wie ==.

Die Klasse String implementiert equals().

+0

Ich weiß, dass der richtige Weg zum Vergleichen von Zeichenfolgen durch equals() ist, aber in diesem Fall war ich an dem Verhalten von == interessiert. Was ich nicht wusste, war das "String Interning". Jetzt verstehe ich. –

Verwandte Themen