java 重写equals为什么不管用?

package NewEquals;
public class New {

public boolean equals(Object obj) {
// TODO Auto-generated method stub
return ture;
}

}
class zz extends New {
public void print(){
System.out.println("y".equals("t"));
}
}

测试类
package NewEquals;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
zz z=new zz();
z.print();
}
}
我让他直接返回一个真 而在调试的时候跟不进我重写的equals方法

1. z.print();调用

public void print(){
System.out.println("y".equals("t"));
}
2 .分析下这个方法。 其实就是 "y".equals("t")。
“y”就是一个字符串常量,他不是New的实例,也不是zz的实例, 所以他的equals方法还是String的equals方法, 和你的equals方法没有关系。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-11

你没有调用相应的方法,你这样写试试:

zz z1 = new zz();
zz z2 = new zz();
System.out.println(z1.equals(z2));
//重写的equals也修改一下
public boolean euqals(Object obj){
    if(obj == null){
        return false;
    }
    if(obj == this){
        return true;
    }
    if(obj instanceof New){//表明obj是New的一个实例,其继承类也可以自动向上转换
        return true;
    }
    return false;
}

手写的,我等下去IDE中看看对不,不对再修改下

第2个回答  2013-08-11
这当然不管用了,你这"y" equals("t")比较的是两个String,调用的String类的equals方法,跟你重写的方法根本完全没关系。

要想起效果在main方法里 zz z1 = new zz(); zz z2 = new zz(); System.out.println(z1.equals(z2));
其中zz中的equals方法其实是从New类里继承而来的。

当然也可以直接在main方法里 New n1 = new New(); New n2 = new New(); System.out.println(n1.equals(n2));结果页是一样
第3个回答  2013-08-11
朋友,你返回的true写错了,写成了ture追问

跟这个没关系 他压根就没去我写的方法 java里true没写错