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