日期:2014-05-20  浏览次数:20697 次

请问JAVA Integer的比较如何让128以上的比较为真
public class AAA_1
{
public static void main(String[] args) 
{
B<String> b1=new B<String>("absdf");
B<String> b2=new B<String>("absdf");
System.out.println(b1.equals(b2));
int a=300;
B<Integer> b3=new B<Integer>(a);
B<Integer> b4=new B<Integer>(a);
System.out.println(b3.equals(b4));
}
}
class B<L>
{
   private L i;
B(L i)
{
this.i=i;
}
public boolean equals(B<L> b)
{
   System.out.println(this.i.hashCode()+"\t"+b.i.hashCode());
   if(this.i==b.i)
    return true;
   else
    return false;
    }
}

求大神指导为何String的为true,而Integer的去为false呢?看网上说128以下的比较为真,我试了是这样的,那用怎么的方法能128以上的数字比较为真呢?
JAVA Integer

------解决方案--------------------
引用:
public class AAA_1
{
public static void main(String[] args) 
{
B<String> b1=new B<String>("absdf");
B<String> b2=new B<String>("absdf");
System.out.println(b1.equals(b2));
int a=300;
B<Integer> b3=new B<Integer>(a);
B<Integer> b4=new B<Integer>(a);
System.out.println(b3.equals(b4));
}
}
class B<L>
{
   private L i;
B(L i)
{
this.i=i;
}
public boolean equals(B<L> b)
{
   System.out.println(this.i.hashCode()+"\t"+b.i.hashCode());
   if(this.i==b.i)
    return true;
   else
    return false;
    }
}

求大神指导为何String的为true,而Integer的去为false呢?看网上说128以下的比较为真,我试了是这样的,那用怎么的方法能128以上的数字比较为真呢?


把你的代码这行改成

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;
    }

------解决方案--------------------
你可以想象成 == 用来比较地址, equals 用来比较值
------解决方案--------------------
java除了基本数据类型(如:int,long,char等等)可以直接用运算符==来比较变量的值以外,其他类型(类,包括外覆类)声明的对象如果相比较值或内容是否相等,都必须用equals,如果用==,比较的是对象引用在内存中的地址值,而不是对象引用的内容。
------解决方案--------------------
据说128到-127 生成Integer对象时 会缓存。下次再新建同值对象时,就直接引用那个缓存了
也就是说128到-127 生成的对象就是一个
而在这之外每NEW 一次就是一个新的对象了。
对象比较用==号肯定是比地址了 地址不同 那肯定不相等嘛 要用equals来比较this.i.equals(b.i)