请问JAVA Integer的比较如何让128以上的比较为真

Ericnull 2013-12-03 11:42:50
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以上的数字比较为真呢?
...全文
872 6 打赏 收藏 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
长公子冰 2013-12-12
  • 打赏
  • 举报
回复
>=128的就没办法直接用==比较了,因为这是JAVA底层设计的,超过128的整型包装类是不使用对象池的,那你只好显示的intValue()一下再用==比较了
  • 打赏
  • 举报
回复
java除了基本数据类型(如:int,long,char等等)可以直接用运算符==来比较变量的值以外,其他类型(类,包括外覆类)声明的对象如果相比较值或内容是否相等,都必须用equals,如果用==,比较的是对象引用在内存中的地址值,而不是对象引用的内容。
wsh303496225 2013-12-04
  • 打赏
  • 举报
回复
据说128到-127 生成Integer对象时 会缓存。下次再新建同值对象时,就直接引用那个缓存了 也就是说128到-127 生成的对象就是一个 而在这之外每NEW 一次就是一个新的对象了。 对象比较用==号肯定是比地址了 地址不同 那肯定不相等嘛 要用equals来比较this.i.equals(b.i)
acefr 2013-12-04
  • 打赏
  • 举报
回复
你可以想象成 == 用来比较地址, equals 用来比较值
acefr 2013-12-04
  • 打赏
  • 举报
回复
引用 楼主 ior_wei 的回复:
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;
    }
yktd26 2013-12-04
  • 打赏
  • 举报
回复
this.i==b.i => this.i.equals(b.i)

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧