当我使用双引号将2 字符串与(+
}运算符连接起来并与具有相同值的其他字符串文字进行比较时,结果为 true ..但是当我连续2个字符串变量和比较给出假?为什么会这样?
据我所知,当我们用(+)运算符连接字符串时,JVM返回新的StringBuilder(string...).toString()
,它在堆内存中创建一个新的String实例,在String池中创建一个引用。如果这是真的,它如何在一个场景中返回 true 而在其他场景中返回false?
第一种情况:
String string1 = "wel";
String string2 = "come";
string1 = string1 + string2; //welcome
String string3 = "welcome";
System.out.println(string3 == string1); // this returns false but have same hashcode
第二种情况:
String string4 = "wel" + "come";
String string5 = "wel" + "come";
System.out.println(string4 == string5); // this returns true
有人可以帮我吗?
答案 0 :(得分:4)
请关注评论。
string1 = string1 + string2; //StringBuilder(string...).toString() which creates a new instance in heap..
String string3 = "welcome"; // It is not in heap.
所以string3 == string1
false
String string4 = "wel" + "come"; //Evaluated at compile time
String string5 = "wel" + "come"; //Evaluated at compile time and reffering to previous literal
所以string4 == string5
是true
答案 1 :(得分:1)
据我所知,当我们用(+)运算符连接字符串时,JVM返回新的StringBuilder(string ...)。toString(),它在堆内存中创建一个新的String实例
正确,除非两个操作数都是文字,否则在编译时会创建一个字符串常量并汇总。
和字符串池中的一个引用。
假。 String池中唯一的东西是String常量和String.intern()
返回值。
如果这是真的
不是。
如何在一个场景中返回true而在其他场景中返回false?
因为你的前提不正确。