可能重复:
Difference Between Equals and ==
In JDK 1.6, can String equals operation can be replaced with ==?
How do I compare strings in Java?意外的结果,比较两个Java的字符串与 “==” 当
虽然与Java的字符串玩耍,我没想到以下结果:
public class Sandbox {
public static void main(String[] args) {
String a = "hello";
String b = "hello";
System.out.println(a == b); //true Why?, a and b both are seperate Objects
System.out.println(a == "hello"); //true Why?
System.out.println(a == new String(b)); //false As expected
}
}
我期望所有的都是错误的,因为“==”比较引用。为什么会有这个结果
当我更改String b = "world"
时,System.out.println(a == b);
返回false
。看起来好像字符串对象的内容正在被比较。
由于Java 7可以比较switch-case-Statements中的字符串,我认为它可能与Java版本有关。但是如here所述,在比较Switch-Case中的字符串时会调用equals-Methode。
请阅读[this](http://stackoverflow.com/questions/971954/difference-between-equals-and)。 – mre 2012-04-12 11:42:43
总之,一些字符串被实现(即缓存)并引用同一个对象,这就解释了为什么==可以工作。但是你不能依赖这种机制,而应该使用equals。 – assylias 2012-04-12 11:45:07
底线是,因为字符串仍然是对象,所以在绝大多数情况下,您应该使用“equals”方法。 – 2012-04-12 11:49:04