Le comportement de littéraux de Chaîne est très confuse dans le code ci-dessous.
Je peux comprendre la ligne 1, la ligne 2 et la ligne 3 sont true
,, mais pourquoi est-ligne 4 false
?
Lorsque j'imprime le hashcode de les deux sont de la même
package a;
class Hello
{
public static void main(String[] args)
{
String hello = "Hello", lo = "lo";
System.out.print((a.Other1.hello == hello) + " "); //line 1
System.out.print((a.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"; }
Je sais qu' == vérifie la référence de l'égalité et de vérifier dans la piscine pour les littéraux. Je sais égale est la bonne façon. Je veux comprendre le concept.
J'ai déjà vérifié cette question, mais elle n'explique pas clairement.
Je vous serais reconnaissant une explication complète.