Java判断两个Integer值相等,应该用equal()而不是==

Phoenix Phoenix 2017.10.26 00:00 浏览(590) 评论 (0)

以下Java代码模拟判断两个Integer值是否相等


Integer a = 3;

People people = new People();

people = DAO.getPeople();

Integer b = people.getB();

System.out.print(a == b);
System.out.print(a.equals(b));


你会看到a==b时,为false,a.equals(b)为true。

这是因为b的值是从数据中拿出的一个对象的值。a和b的id不相同,所以导致了a==b为false。


其中的原因:

static final Integer cache[] = new Integer[-(-128) + 127 + 1];


static {
    for(int i = 0; i < cache.length; i++)
    cache[i] = new Integer(i - 128);
}

这是源码中的,也就是说cache中已有-128到127,不在这范围的会新new ,这时可以理解比较是内存地址,
也就是是不是同一对象.

所以说当Integer的值不在-128到127的时候使用==方法判断是否相等就会出错,在这个范围之内的就会没有问题!!!



得出的结论:

如果判断兩个Integer是否相等,最保险的方法是用equals(),而不是用==。


注:但如果是判断两个int值相等,则可以用==;

本文链接 https://www.mangoxo.com/blog/Geo2el50 版权所有,转载请保留地址链接,感谢!

Phoenix 关注
來一遭,做一事。 等一人,愛一次。
  • 964 动态
  • 1,986 相册
  • 63 粉丝
  • 2,579 获赞