class Value {
  int i;
}public class EqualsMethod2 {
  public static void main(String[] args) {
    Value v1 = new Value();
    Value v2 = new Value();
    v1.i = v2.i = 100;
    System.out.println(v1.equals(v2));
  }
}
说说两个问题:1.输出结果;2.输出结果的原因.

解决方案 »

  1.   

    1.输出结果:false;
    2.输出结果的原因,Value 类没有重载equals方法,于是v1.equals(v2)会调用Object的equals方法,而Object的equals是对refrence进行比较,呵呵,而v1,v2引用的是通过new操作产生的两个不同对象.
      

  2.   

    ls正解,equals比较的是是否指向同一个对象,不是内容,除非自己覆盖equals
      

  3.   

    这个比较简单,还是注意string吧
      

  4.   

    楼上说的对。想考SCJP还是多学学STRING吧。
      

  5.   

    补充:
    public class EqualsMethod {
      public static void main(String[] args) {
        Integer v1 = new Integer(47);
        Integer v2 = new Integer(47);
        System.out.println(v1.equals(v2));
      }
    }
    此时的结果和原因呢,大家说说看.
      

  6.   

       
      true
    因为INTEGER不是对象
      

  7.   

    找JDK的代码看看Integer.equals(Obejct o)怎么写的:
    public boolean equals(Object obj){
      if(obj instanceof Integer){
        retrun value==((Integer)obj).intValue();
      }
      return false;
    }
    结果显而易见:true。