Java: Stringpool
Version 1.0
Lehrgang von POSTutorial, erstellt am 27. Sep. 2013
Vergleichen von Strings Vergleicht man zwei Strings mit dem == so vergleicht man die Objekte auf welche die zwei Strings verweisen. Das bedeutet folgendes: public class VergleicheString { public static void main(String args[]) { String s1 = "Vergleichstext"; String s2 = "Vergleichstext"; // s1 und s2 verweisen auf das selbe Objekt im Stringpool System.out.println("s1 == s2: " + (s1 == s2)); System.out.println("s1.equals s2: " + (s1.equals(s2))); s1 = new String("Vergleichstext"); s1 = new String("ack"); System.out.println("s1 == s2: " + (s1 == s2)); System.out.println("s1.equals s2: " + (s1.equals(s2))); } }
Ausgabe: 1. 2. 3. 4.
s1 == s2: s1.equals s1 == s2: s1.equals
true s2: true false s2: false
Beim Vergleichen von s1 und s2 in Zeile 1 wird das Objekt verglichen, da diese auf das gleiche verweisen, ergibt das „true“. In Zeile 2 wird auf Inhaltsgleichheit geprüft, da dies der Fall ist, ergibt dies ebenfalls „true“. Beachte: Sollte eines der beiden Objekte die über „equals“ verglichen werden, nicht vom selben Objekttyps sein, ergibt es automatisch „false“.
In der 3. Zeile wird wieder auf Objektgleichheit überprüft, weil wir aber ein neues Objekt mithilfe von „new“ angelegt haben, verweist s1 nicht mehr auf das ursprüngliche, sondern es wird im Stringpool ein neues Objekt angelegt. (siehe Grafik). Zeile 4 ist damit selbsterklärend, s1 und s2 sind nicht Inhaltsgleich und daher „false“.
© POSTutorial, 2013 – Bildquelle: http://cdn1.journaldev.com