因为他们比较的都是地址!而不是比较值!
第二种和第三种应该是false

解决方案 »

  1.   

    因为他们比较的都是地址!而不是比较值!
    第二种和第三种应该是false
      

  2.   

    不好意思
    第三个应该是:
    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)); 

    } 结果是
    false
      

  3.   

    但是luckyfan
    第二个应该是true呀
    您可以编译一下
      

  4.   

    我第一天看书,刚看到这,我的理解如下//: c03:EqualsMethod2.java
    // From 'Thinking in Java, 2nd ed.' by Bruce Eckel
    // www.BruceEckel.com. See copyright notice in CopyRight.txt.class Value {
      int i;
    /*  
      public boolean equals(Value v){
         return (v.i==this.i);
       }
    */  
    }public class EqualsMethod2 {
      public static void main(String[] args) {
        Integer n1 = new Integer(47);
        Integer n2 = new Integer(47);
        System.out.println(n1.equals(n2));  //调用Integer得equals比较内容
        
        Value v1 = new Value();
        Value v2 = new Value();
        v1.i = v2.i = 100;
        System.out.println(v1.equals(v2));  //调用Value的equals比较内容,如果没有,则调用缺省的比较地址
        v1 = v2;
        System.out.println(v1.equals(v2));  //同上说明    
      }
    } //
      

  5.   

    kingfish(八百里秦川@龙城异客) 
    您说
    //调用Value的equals比较内容,如果没有,则调用缺省的比较地址
    那么
    vi.i=v2.i=100;
    100 不是他们共同的内容吗?
      

  6.   

    因为value并没有重载equals,所以调用缺省的equals比较地址,当然是false如果写一个equals,如下
    class Value {
      int i;
      public boolean equals(Value v){
         return (v.i==this.i);       //比较内容
       }
    }
    结果就是true
      

  7.   

    因为缺省的value的equals(value v)比较地址
    而expression: v1.i = v2.i = 100;只是让他们的i相等
    并没有让他们的地址相等
    所以false
    而v1 = v2;
    就是的两者完全等同
    我这样理解对吗?另外,我在看James Gosling的原版《The Java Programming Language》
    不知道是不是一本好书?
      

  8.   

    对我下载了thinking in java在看,你说的这个没看过
      

  9.   

    那看来下次要找thinking in java看了
    谢谢你了