Das Verhalten von String-Literalen ist verwirrend

Das Verhalten von String-Literalen ist im folgenden Code sehr verwirrend.

Ich kann Zeile 1, Zeile 2 und Zeile 3 verstehentrue, aber warum ist Zeile 4false?

Wenn ich den Hashcode von beiden drucke, sind sie gleich.

class Hello
{
   public static void main(String[] args)
   {
      String hello = "Hello", lo = "lo";
      System.out.print((Other1.hello == hello) + " ");     //line 1
      System.out.print((Other1.hello == "Hello") + " ");   //line 2
      System.out.print((hello == ("Hel"+"lo")) + " ");       //line 3
      System.out.print((hello == ("Hel"+lo)) + " ");         //line 4
      System.out.println(hello == ("Hel"+lo).intern());      //line 5
      System.out.println(("Hel"+lo).hashCode());   //hashcode is 69609650 (machine depedent)
      System.out.println("Hello".hashCode());       //hashcode is same WHY ??.
   }
}

class Other1 { static String hello = "Hello"; }

ich weiß das== prüft auf Referenzgleichheit und prüft im Pool auf Literale. Ich kenneequals() ist der richtige Weg. Ich möchte das Konzept verstehen.

Ich habe das schon überprüftFrage, aber es erklärt nicht klar.

Ich würde mich über eine vollständige Erklärung freuen.

Antworten auf die Frage(11)

Ihre Antwort auf die Frage