相关疑难解决方法(0)

autoboxing是否调用valueOf()?

我正在尝试确定以下语句是否保证是真的:

((Boolean)true) == Boolean.TRUE
((Boolean)true) == Boolean.valueOf(true)
((Integer)1) == Integer.valueOf(1)
Run Code Online (Sandbox Code Playgroud)

我一直认为自动装箱相当于调用valueOf()相应的类型.我在这个主题上看到的每一个讨论似乎都支持我的假设.但我在JLS中找到的只有以下内容(§5.1.7):

如果该值p被装箱是整数文本类型的int之间-128127包容性(§3.10.1)或布尔值truefalse(§3.10.3),或字符之间文字'\u0000''\u007f'包容性(§3.10.4),然后让ab是任何两个拳击转换的结果p.情况总是如此a == b.

这描述的行为*相似valueOf().但似乎没有任何valueOf()实际调用的保证,这意味着理论上可以有一个实现为自动装箱值保留一个单独的专用缓存.在这种情况下,缓存的自动装箱值与常规缓存的装箱值之间可能不存在标识相同性.

Oracle的自动装箱教程说明了li.add(i)编译到的事实li.add(Integer.valueOf(i)),其中i是一个int.但我不知道该教程是否应被视为权威来源.


*这是一个稍微弱一点的保证valueOf(),因为它只是指字面值.

java autoboxing boxing

50
推荐指数
2
解决办法
2481
查看次数

标签 统计

autoboxing ×1

boxing ×1

java ×1