Erstellen zweier Objekte mit dem selben Inhalt

friednoodles

Aktives Mitglied
Hi, habe wiedermal zwei Verständnisfragen zu einem Grundlagen Thema.

Ich habe zu Übungszwecken viele verschiedene Strings erstellt und geschaut wann sich welcher String mit welche Methode wie verhält.
Eins meiner Beispiele war folgendes:
Java:
    privatestatic void stringÜbung1() {
        String s1 = new String("Hallo");
        String s2 = new String("Hallo");
        
        System.out.println(s1==s2);            //false
        System.out.println(s1.equals(s2));    //true
    }
Meine erste Frage wäre:
Warum ist es problematisch wenn ich zwei Strings mit dem selben Inhalt erstelle? Weil sie zwei verschiedene Speicherbereiche einnehmen, trotz selben Inhalts?

Zweite Frage:
Wenn ich nun s1=s2; wie folgt einfüge


Java:
    privatestatic void stringÜbung1() {
        String s1 = new String("Hallo");
        String s2 = new String("Hallo");
        s1=s2;
        System.out.println(s1==s2);            //true
        System.out.println(s1.equals(s2));    //true
    }

Was genau ändert sich im ersten System.out.print damit da nun true steht?
 
Warum ist es problematisch wenn ich zwei Strings mit dem selben Inhalt erstelle? Weil sie zwei verschiedene Speicherbereiche einnehmen, trotz selben Inhalts?
Sehr schön einleitend hier beschrieben.
Was genau ändert sich im ersten System.out.print damit da nun true steht?
Du lässt mit der Anweisung s1=s2 s1 auf die gleiche Speicheradresse wie s2 zeigen. Da mit == die Adressen verglichen werden kommt nun true raus.
Java:
1 String s1 = new String("Hallo");
2 String s2 = new String("Hallo");
3 s1=s2;
4 System.out.println(s1==s2);            //true
5 System.out.println(s1.equals(s2));    //true
Mal mit fiktiven Speicheradressen dargestellt:
Code:
Zeile | Inhalt s1 | Inhalt s2 | Addr. s1 | Addr. s2
1     |  Hallo    |    -      |  0x001   | -
2     |  Hallo    | Hallo     |  0x001   | 0x002
3     |  Hallo    | Hallo     |  0x002   | 0x002
 

Zurück
Oben