黑马程序员技术交流社区
标题:
帮忙看下我哪里错了
[打印本页]
作者:
郑传庆
时间:
2012-6-11 19:57
标题:
帮忙看下我哪里错了
public class ValuesPair {
private static int number;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public ValuesPair(int values){
this.number = values;
}
public boolean equals(Object obj ){//问题1
System.out.println("---->equals()");
if(obj instanceof ValuesPair){
System.out.println("-aa--->equals()");
ValuesPair v = (ValuesPair)obj;
if(number==v.getNumber()){
return true;
}
}
return false;
}
public static int compareTo(Object obj){
ValuesPair v = (ValuesPair)obj;
Integer iwlook = new Integer(v.getNumber());
if(iwlook.intValue()>number){
return -1;
}if(iwlook.intValue()<=number){
return +1;
}
return 0;
}
public int hashCode(){//问题2
System.out.println("---->hashCode()");
return number*100;
}
public static void main(String args[]) {
ValuesPair v = new ValuesPair(11);
compareTo(v);
System.out.println("----"+v.number);//问题3
}
}
问题1和问题2都是重写了的方法,但是它们不是在运行的时候就调用吗?问题3的结果怎么是11?
作者:
赵兵锋
时间:
2012-6-11 20:14
ValuesPair v = new ValuesPair(11);//实例化一个对象,将类变量number值改为11.
compareTo(v);//你调用的是你自己定义的一个静态方法,这个方法里没有调用equals和hashCode方法。
System.out.println(v.equals(v));//这样是调用你重写过的equals方法。
System.out.println("----" + v.number);// number是类变量,一直没有被改过,所以还是11.
复制代码
作者:
付信榕
时间:
2012-6-11 20:28
public class ValuesPair {
private static int number;
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public ValuesPair(int values){
this.number = values;
}
public boolean equals(Object obj ){//问题1
System.out.println("---->equals()");
if(obj instanceof ValuesPair){
System.out.println("-aa--->equals()");
ValuesPair v = (ValuesPair)obj;
if(number==v.getNumber()){
return true;
}
}
return false;
}
public static int compareTo(Object obj){
ValuesPair v = (ValuesPair)obj;
Integer iwlook = new Integer(v.getNumber());
if(iwlook.intValue()>number){
return -1;
}if(iwlook.intValue()<=number){
System.out.println("-bb--->compareTo()");//加了测试语句
return +1;
}
return 0;
}
public int hashCode(){//问题2
System.out.println("---->hashCode()");
return number*100;
}
public static void main(String args[]) {
ValuesPair v = new ValuesPair(11);
compareTo(v);
System.out.println("----"+v.number);//问题3
}
}
输出
-bb--->compareTo()
----11
由此也可以看出只运行compareTo ( )方法而没有运行equals( )方法.所以number的值还是初始化时获得的11.
作者:
杨天皓
时间:
2012-6-11 20:42
问题1,确实是重写了equals方法。
但是问题2,那不是重写,那只能是你自己写了一个函数名叫compareTo的方法。
你在主函数里面,只是调用了compareTo方法,但是返回的值,你并没有给成员变量number赋值。
所以你在创建对象初始化的值一直都没有改变过。
所以输出的就是11.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2