Как Java хранит строки и как подстрока работает внутри? [закрыто]

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);
    }
}

Вот вывод, который я получаю на Java 1.6.0_27:

false
true
false
true

Может кто-нибудь, пожалуйста, объясните вывод. Я знаю, что в Java различаются строки, хранящиеся в куче, и строки, хранящиеся в строкеобщий бассейн " (который может быть интернирован). Внутренне, как отличается их представление. Как это меняет алгоритм подстроки. Пожалуйста, цитируйте книгу / статью / блоги и т. Д., Где это уместно.

Ответы на вопрос(2)

Ваш ответ на вопрос