Причина в том, что значение s2 используется как "intern" . Объект просто засовывается в бассейн для повторного использования.
Ниже я ожидаю других результатов, сначала интернируя одну и ту же строку s0
.
String s0 = "durga".concat("software").intern();
String s1 = "durga";
String s2 = s1.concat("software");
String s3 = s2.intern();
System.out.println(s2 == s3); // false
System.out.println(s3 == s0); // true
В истории реализация intern
изменилась. В начале пул строк находился в «постоянной памяти», возможно, загромождая эту память. Вследствие этого теги XML, которые были обработаны синтаксическими анализаторами XML, вместо этого использовали свое собственное отображение.
Надеюсь, код действительно выдает false + true.