Vergleichen von Strings (Java): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K
K
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
Strings werden '''nicht''' wie primitive Datentypen mit dem "==" Operator verglichen!<br>
 
Strings werden '''nicht''' wie primitive Datentypen mit dem "==" Operator verglichen!<br>
Strings sind Objekte, die mit der Methode [https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object- Object#equals(Object obj)] verglichen werden.<br>
+
Strings sind [[Objekt|Objekte]], die mit der [[Methode]] [https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object- Object#equals(Object obj)] verglichen werden.<br>
Wenn man sie mit "==" vergleicht, wird nicht der Inhalt der Objekte, sondern die Referenz auf das Objekt selbst verglichen.
+
'''Wenn man sie mit "==" vergleicht, wird nicht der Inhalt der Objekte, sondern die [[Referenz]] auf das Objekt selbst verglichen.'''
  
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
Zeile 14: Zeile 14:
 
       System.out.println(a == b ? "a == b" : "a != b");
 
       System.out.println(a == b ? "a == b" : "a != b");
 
       System.out.println(c == b ? "c == b" : "c != b");
 
       System.out.println(c == b ? "c == b" : "c != b");
       System.out.println(c == b ? "a == d" : "a != d");
+
       System.out.println(a == d ? "a == d" : "a != d");
 
       System.out.println(a.equals(d) ? "a equals d" : "a not equals d");
 
       System.out.println(a.equals(d) ? "a equals d" : "a not equals d");
 
       System.out.println(c == d ? "c == d" : "c != d");
 
       System.out.println(c == d ? "c == d" : "c != d");

Aktuelle Version vom 24. April 2020, 16:21 Uhr

Strings werden nicht wie primitive Datentypen mit dem "==" Operator verglichen!
Strings sind Objekte, die mit der Methode Object#equals(Object obj) verglichen werden.
Wenn man sie mit "==" vergleicht, wird nicht der Inhalt der Objekte, sondern die Referenz auf das Objekt selbst verglichen.

public class Test {
   public static void main(String[] args) {
      String a = new String("blabla");
      String b = new String("blabla");
      String c = b;
      String d = "blabla";

      System.out.println(a.equals(b) ? "a equals b" : "a not equals b");
      System.out.println(a == b ? "a == b" : "a != b");
      System.out.println(c == b ? "c == b" : "c != b");
      System.out.println(a == d ? "a == d" : "a != d");
      System.out.println(a.equals(d) ? "a equals d" : "a not equals d");
      System.out.println(c == d ? "c == d" : "c != d");
   }
}

Ausgabe:

  • a equals b - weil der Text der beiden String Objekte identisch ist
  • a != b - weil a und b nicht auf das gleiche Objekt zeigen
  • c == b - weil c und b auf das gleiche Objekt zeigen
  • a == d - Java legt für Strings intern einen String-Pool an. Wenn ein String sich wiederholt, wird kein neues Objekt erzeugt, sondern das bekannte aus dem String-Pool wiederverwendet. a und d zeigen also auf das gleiche Objekt im Pool
  • a equals d - weil der Text der beiden String Objekte identisch ist
  • c != d - weil c und d nicht auf das gleiche Objekt zeigen


Fragen

Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!

Wir helfen dir gerne!


Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!

Du musst angemeldet sein, um einen Kommentar abzugeben.