String a = "devender";
String b = "devender";
String c = "dev";
String d = "dev" + "ender";
String e = c + "ender";
System.out.println(a == b); //case 1: o/p true
System.out.println(a == d); //case 2: o/p true
System.out.println(a == e); //case 3: o/p false
a & b les deux pointent vers le même String Literal dans le string constant pool. Donc true
dans le cas 1
String d = "dev" + "ender";
devrait être utilisé en interne en utilisant quelque chose comme :
String d = new StringBuilder().append("dev").append("ender").toString();
Comment a & d pointent vers la même référence et non a & e ?
0 votes
Regardez ici javatpoint.com/string-comparaison-in-java
0 votes
Le compilateur sait tout sur
d
au moment de la compilation, afin qu'il puisse être optimisé et interné.e
utilise une variable, donc le compilateur ne sait pas tout à son sujet au moment de la compilation. De plus, aucun de ces comportements n'est garanti, même s'ils sont courants.0 votes
@AzatNugusbayev J'ai suivi ce tutoriel :P
0 votes
Donc, si vous lisez cet article, alors, vous devez comprendre ce qui cause votre problème ! Il y a création d'un
new String
C'est pourquoi il fait référence à un autre pointeur.String
)0 votes
@AzatNugusbayev pourquoi une nouvelle chaîne est créée dans le cas 3 et pas dans le cas 2 alors que les deux utilisent StringBuilder ?
6 votes
@dev - le cas -2 n'utilise pas
StringBuilder
également, en faisantc
final
fera le retour du cas 3true
3 votes
@sidgate n'est pas un doublon.