【发布时间】:2021-02-25 06:53:57
【问题描述】:
为什么结果是假的?
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
String s4 = s1+s2;
System.out.println(s3==s4);
据我所知,常量池中已经有一个“helloworld”。
感谢您的回答,但我想问的不是“==”和“等于”之间的区别,我只是想确保s1+s2; 生成一个新字符串,即使已经有一个具有值的字符串对象内存中的“helloworld”。
【问题讨论】:
-
使用 .equals() 即 s3.equals(s4)
-
@BeshambherChaukhwan 我认为关键是它没有指向同一个字符串实例。并不是说字符串的值不相等。
-
s4 将创建一个新字符串,因此 == 比较失败。 == 仅适用于字符串文字,不适用于变量
-
这能回答你的问题吗? How do I compare strings in Java?
-
您可能期望
String s4 = s1+s2;在编译时得到优化。但事实并非如此,它仍然是运行时的语句。因此,您正在那里创建一个新的String。
标签: java string memory-address