Wie speichert Java Strings und wie funktioniert der Teilstring intern? [geschlossen]

class StringTesting {
    public static void main(String args[])
    {
        String str = "abcd";
        String str1 = new String("abcd");
        String str2 = str.substring(0,2);
        String str3 = str.substring(0,2);
        String str4 = str.substring(0,str.length());
        String str5 = str1.substring(0,2);
        String str6 = str1.substring(0,2);
        String str7 = str1.substring(0,str1.length());

        System.out.println(str2 == str3);
        System.out.println(str == str4);
        System.out.println(str5 == str6);
        System.out.println(str1 == str7);
    }
}

Hier ist die Ausgabe, die ich auf Java 1.6.0_27 bekomme:

false
true
false
true

Kann mir bitte jemand die Ausgabe erklären. Ich weiß, dass Java zwischen String, der im Heap gespeichert ist, und String, der im String "common pool" gespeichert ist (der interniert werden kann), unterscheidet. Inwiefern unterscheidet sich ihre Darstellung intern? Wie ändert sich der Teilstring-Algorithmus? Bitte zitieren Sie gegebenenfalls Buch / Artikel / Blogs usw.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage