String s="hel"+"lo"
if(s == "hello")
{
//print true
}
else
{
//print false
}
Sun jvm = true Ibm jvm = false
为什么会出现这种差异?
答案 0 :(得分:7)
==
仅供参考比较。
对于Sun JVM,这种行为很可能是由于字符串池造成的 对于IBM JVM,它可能是一个不同的实现。
如果您需要对象比较,请使用equals
答案 1 :(得分:2)
==
只有在构造后字符串被插入时才会成功。我认为关键点在于javac是否在编译时优化+
,即如果JVM看到
String s = "hello"
或
String s = "hell" + "lo".
(顺便说一句,这必须是一个复制粘贴错误 - 在连接值中会有三个l)
答案 2 :(得分:1)
==
用于检查两个对象是否都指向同一个对象。
使用if(object1.equals(object))
检查两个对象的内容是否相等
答案 3 :(得分:1)
我想指出Java 7和6与实习字符串的行为不同,请参阅this answer
如果您使用的是Sun Java 7,那么IBM jvm仍然可以作为Java 6使用。
答案 4 :(得分:0)
虽然没有回答你的问题:在字符串上做==很可能不是你想要的。
if(s.equals("hello")) {
可能是你真正想要做的......
编辑:因为“==”比较引用,取决于它们如何创建新字符串的实现,jvms可能同时与它们的结果一致! “==”不是检查Java中字符串相等性的有效运算符。