Поведение строковых литералов сбивает с толку

Поведение строковых литералов очень запутанно в приведенном ниже коде.

Я могу понять, строка 1, строка 2 и строка 3true, но почему строка 4false?

Когда я печатаю хэш-код обоих, они одинаковы.

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

я знаю это== проверяет равенство ссылок и проверяет в пуле литералы. я знаюequals() это правильный путь. Я хочу понять концепцию.

Я уже проверил этовопрос, но это не объясняет ясно.

Буду признателен за полное объяснение.

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

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