因为你的Value没有重载equals方法,结果
v1.equals(v2) 等价于 v1 == v2 ,判断地址是否相等。肯定不等嘛Integer重载了equals方法,
I1.equals(I2)实际上Integer里面的方法会判断两个对象的值是否相等,而不是地址,所以为真

解决方案 »

  1.   

    那么equals方法是怎样实现判断两个对象的值是否相等呢?
      

  2.   

    public boolean equals(Value val)
    {
      return this.i == val.i?true:false
    }
      

  3.   


    class Value {
    static int i;
    public Value(int par){
    i=par;
    System.out.println("xxxxxx:"+i);
    }
    public boolean equals(Object o){
      if(o instanceof Value ){
        Value v = (Value)o;
        if(v.i==this.i) return true;
        else return false;
      }
      return false;
    }
    }
      

  4.   

    to hanson_yi:
    看了你的代码我忍不住晕倒
    你的代码应该这样写: 
    public boolean equals(Value val)
    {
    return (this.i == val.i);
    }
    to 顶楼的:
    不要把i 定义成static,肯定不是你想要的 
      

  5.   

    to to hanson_yi vive(白起):
    他的代码可能不是特别简练,但是也不要被晕倒。谁何尝不是那么走过来的。
      

  6.   

    看Integer 的原代码实现是这样的 
    public final class Integer extends Number implements Comparable {
        //略
        private int value;
        public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
        }
    }
    要实现同样的功能,就要重载equals方法
    还有
    class Value {
    static int i;  //static 感觉有问题,应该是private 才好,不然,这些值不就都相等了
    }
    建议
    class Value {
      private int i;
      public Value(int par){
        this.i=par;
        System.out.println("xxxxxx:"+i);
      }
      public boolean equals(Object o){
        if(o instanceof Value ){
          return this.i == ((Value)o).i;
        }
        return false;
      }
    }