A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑传庆 中级黑马   /  2012-6-11 19:57  /  1405 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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?



评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
  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.
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1

查看全部评分

回复 使用道具 举报
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.



评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
问题1,确实是重写了equals方法。
但是问题2,那不是重写,那只能是你自己写了一个函数名叫compareTo的方法。

你在主函数里面,只是调用了compareTo方法,但是返回的值,你并没有给成员变量number赋值。
所以你在创建对象初始化的值一直都没有改变过。
所以输出的就是11.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马