黑马程序员技术交流社区

标题: 帮忙看下我哪里错了 [打印本页]

作者: 郑传庆    时间: 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
  1.                 ValuesPair v = new ValuesPair(11);//实例化一个对象,将类变量number值改为11.
  2.                 compareTo(v);//你调用的是你自己定义的一个静态方法,这个方法里没有调用equals和hashCode方法。
  3.                 System.out.println(v.equals(v));//这样是调用你重写过的equals方法。
  4.                 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