首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

请教JAVA Integer的比较怎么让128以上的比较为真

2013-12-05 
请问JAVA Integer的比较如何让128以上的比较为真public class AAA_1{public static void main(String[] ar

请问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)

热点排行