Integer使用==做判断遇到的问题

问题: 最近使用Integer类型的数据做判断时,遇到了一个神奇的问题。 如: Integer a=223; Integer b=223; 这样使用==做判断,得到的结果是 false 原因: 后来查找了一下,发现Integer类...

问题:

最近使用Integer类型的数据做判断时,遇到了一个神奇的问题。

如:

Integer a=223;

Integer b=223;

这样使用==做判断,得到的结果是 false

原因:

后来查找了一下,发现Integer类型的数据,范围在-128-127时是放在常量池的,意思也就是如果在范围内,会直接从常量池中取值,这时使用==判断是没问题的,但是如果不在常量池范围内使用Integer是就会重新new Integer(),所以这个时候使用==得到的结果就是false了。

 debug看一下各个变量的内存地址:

 控制台输出结果:

这里顺便说一下==和equals的区别

说简单点就是: ==比较的是内存地址,而equals比较的是值是否相等。

上面的测试案例把==换成equals:

 控制台输出:

  • 发表于 2020-01-09 19:40
  • 阅读 ( 111 )
  • 分类:网络文章

条评论

请先 登录 后评论
不写代码的码农
小编

篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除