解决方案 »

  1.   

    this.i==b.i => this.i.equals(b.i)
      

  2.   


    把你的代码这行改成public boolean equals(B<L> b)
        {
           System.out.println(this.i.hashCode()+"\t"+b.i.hashCode());
           //if(this.i==b.i)
           if(this.i.equals(b.i))
               return true;
           else
               return false;
        }
      

  3.   

    你可以想象成 == 用来比较地址, equals 用来比较值
      

  4.   

    java除了基本数据类型(如:int,long,char等等)可以直接用运算符==来比较变量的值以外,其他类型(类,包括外覆类)声明的对象如果相比较值或内容是否相等,都必须用equals,如果用==,比较的是对象引用在内存中的地址值,而不是对象引用的内容。
      

  5.   

    据说128到-127 生成Integer对象时 会缓存。下次再新建同值对象时,就直接引用那个缓存了
    也就是说128到-127 生成的对象就是一个
    而在这之外每NEW 一次就是一个新的对象了。
    对象比较用==号肯定是比地址了 地址不同 那肯定不相等嘛 要用equals来比较this.i.equals(b.i)
      

  6.   

    >=128的就没办法直接用==比较了,因为这是JAVA底层设计的,超过128的整型包装类是不使用对象池的,那你只好显示的intValue()一下再用==比较了