整数包装类和 == 运算符 - 在哪里指定行为?
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true
integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false
我发现它在-128 - 127
范围内返回==(如果是),为什么有这样的规范?
Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);//true
integer1 = 128;
integer2 = 128;
System.out.println(integer1 == integer2);//false
I found it returns == (if it is) under the range of -128 - 127
, why is there such specification ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于
Integer.valueOf( int)
:说明:
Integer integer1 = 127
是Integer integer1 = Integer.valueOf(127)
的快捷方式>,对于 -128 到 127(含)之间的值,整数会放入缓存中并多次返回,而更高和更低的数字每次都会生成新的整数。Because of this code in
Integer.valueOf(int)
:Explanation:
Integer integer1 = 127
is a shortcut forInteger integer1 = Integer.valueOf(127)
, and for values between -128 and 127 (inclusive), the Integers are put in a cache and returned multiple times, while higher and lower numbers generate new Integers each time.如果是完全相同的对象,
==
将返回 true。将 Java“实习生”数字中的整数装箱到该范围内,因此此类数字的任何装箱版本都将产生完全相同的对象。要在比较中避免这种影响,请使用 .equals()
==
will return true if it's the exact same object. Boxing integers in Java 'intern' numbers within that that range, so any boxed version of such a number will result in the exact same object.To get avoid this effect in comparisons, use .equals()