整数包装器对象仅在值127内共享相同的实例? [英] Integer wrapper objects share the same instances only within the value 127?

查看:87
本文介绍了整数包装器对象仅在值127内共享相同的实例?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这里它们是同一个实例:

Here they are the same instance:

Integer integer1 = 127;
Integer integer2 = 127;
System.out.println(integer1 == integer2);  // outputs "true"

但这里它们是不同的实例:

But here they are different instances:

Integer integer1 = 128;
Integer integer2 = 128;
System.out.println(integer1 == integer2);  // outputs "false"

为什么包装器对象只在值127内共享同一个实例?

Why do the wrapper objects share the same instance only within the value 127?

推荐答案

因为它是由Java语言规范指定的。

Because it's specified by Java Language Specification.

JLS 5.1.7拳击转换


如果装箱的价值 p true false 字节 char \ u0000 \ u007f 的范围内,或 int 介于-128和127(含)之间的数字,然后让 r 1 r 2 p 的任意两次装箱转换的结果。情况总是 r 1 == r 2

If the value p being boxed is true, false, a byte, or a char in the range \u0000 to \u007f, or an int or short number between -128 and 127 (inclusive), then let r1 and r2 be the results of any two boxing conversions of p. It is always the case that r1 == r2.

理想情况下,装箱给定的原始值 p ,总会产生相同的参考。实际上,使用现有的实现技术可能不可行。上述规则是务实的妥协。上面的最后一个条款要求将某些常见值装入无法区分的对象中。实现可以懒惰地或急切地缓存这些。对于其他值,此公式不允许对程序员的盒装值的身份进行任何假设。这将允许(但不要求)共享部分或全部这些引用。

Ideally, boxing a given primitive value p, would always yield an identical reference. In practice, this may not be feasible using existing implementation techniques. The rules above are a pragmatic compromise. The final clause above requires that certain common values always be boxed into indistinguishable objects. The implementation may cache these, lazily or eagerly. For other values, this formulation disallows any assumptions about the identity of the boxed values on the programmer's part. This would allow (but not require) sharing of some or all of these references.

这可确保在大多数情况下,行为将是理想的,不会造成不应有的性能损失,特别是在小型设备上。例如,较少内存限制的实现可以缓存所有 char short 值,以及 int long 值范围为-32K到+ 32K。

This ensures that in most common cases, the behavior will be the desired one, without imposing an undue performance penalty, especially on small devices. Less memory-limited implementations might, for example, cache all char and short values, as well as int and long values in the range of -32K to +32K.

这篇关于整数包装器对象仅在值127内共享相同的实例?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆