当前位置: 代码迷 >> J2SE >> 没重写equals方法的话,应该跟==的效果一样才对吧?
  详细解决方案

没重写equals方法的话,应该跟==的效果一样才对吧?

热度:16   发布时间:2016-04-23 20:41:08.0
没有重写equals方法的话,应该跟==的效果一样才对吧??
本帖最后由 roro5119 于 2014-06-04 16:11:23 编辑
jdk里面的equals方法为:
 public boolean equals(Object obj) {
        return (this == obj);
    }

那不重写的话,应该效果跟==一样才对啊,怎么现实不是呢?哪里理解错了呢?

class Test
{
public static void main(String args []){
String s1 = new String("ss");
boolean b1=s1.equals("ss");
System.out.println(b1); //返回true

//返回false
boolean b2;
if(s1=="ss"){
b2=true;
}else{
b2=false;
}
System.out.println(b2);


}
}

为什么一个返回true,一个返回false
------解决方案--------------------
因为String重写了equals

s1=="ss"这里返回false是因为s1的地址和”ss“不一样
------解决方案--------------------
不知道你再说什么,String是重写过equals方法的
------解决方案--------------------
不重写的话,equals 比较的是 内存地址 
String 重写了 equals 方法,比较的是具体的每个字符是否相等了,所以第一个equals是true了
第二个 比较的就是内存地址了 “ss” 是常量池的对象,s1 指向的是堆中的对象,所以就是false了
  相关解决方案