原因:在内存堆中还有个东西就“串池”,当你以赋值的形式,即String a = "abc";给a赋值,系统会先在“串池”里找有没有,没有就创建,如果有,就直接给赋值了。在这里例子中String a = "abc",之前“串池”中没有,于是系统创建了一个,String b = "abc"到“串池”中寻找的时候,有了,于是直接赋与内存地址,因此输出为true。 直接new出来的字符串不在“串池”中,因此每次new的是不“==”的。
------解决方案-------------------- 对直接赋值和new是不一样的~~比如 String a = new String("abc"); String b = new String("abc"); System.out.println(a==b);结果为false 记住==永远是比较的地址,至于楼主的情况为什么是true,原因是地址一样,原因如2楼所说; 大多数情况下(就是没重写equals的情况)==与equals是等价的,让你看看所有类的父类Object中equals方法:
Java code
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
------解决方案--------------------