我想知道java与int比较时是否自动将Integer转换为int?或者==尝试并比较原语的引用?
这是真的还是我需要做的i.intValue()==2?
Integer i = Integer.valueOf(2);
if (i==2){
//always?
}
Run Code Online (Sandbox Code Playgroud)
aio*_*obe 11
是的,当比较int使用==参数时,如果需要,将取消装箱.
Java语言规范的相关部分:
15.21.1数值等式算子==和!=
如果等于运算符的操作数都是数字类型,或者一个是数字类型而另一个是可转换的(第5.1.8节)为数字类型,则对操作数执行二进制数字提升(第5.6.2节).如果提升类型的操作数是int或long,则执行整数相等测试; 如果提升的类型是float或double,则执行浮点相等性测试.
请注意,二进制数字促销执行值集转换(第5.1.13节)和拆箱转换(第5.1.8节).对浮点值进行精确比较,无论它们的代表值是从哪个值集中得出.
同样适用于<,<=,>,>=等,以及+,-,*等等.
所以,
System.out.println(Integer.valueOf(17) == 17);
Run Code Online (Sandbox Code Playgroud)
打印true:-)
但你可以比较两个相等的字符串与==有时得到真或假,取决于字符串的汇总方式...
是的,实际上也存在类似的情况Integers.
当装箱(转换int为Integer)时,编译器使用缓存来获取较小的值(-128-127)并为相同的值重用相同的对象,因此可能有点令人惊讶,我们有以下内容:
System.out.println(Integer.valueOf(100) == Integer.valueOf(100)); // prints true
System.out.println(Integer.valueOf(200) == Integer.valueOf(200)); // prints false
Run Code Online (Sandbox Code Playgroud)
是的,它将拆箱。JLS 的第 15.21.1 节(数字 == 运算符)对此进行了介绍:
\n\n\n如果等式运算符的操作数均为数字类型,或者一个为数字类型,另一个可转换(\xc2\xa75.1.8)为数字类型,则对操作数( \xc2\xa75.1.8 )执行二进制数字提升。 6.2)。如果操作数的提升类型为 int 或 long,则执行整数相等测试;如果提升的类型是 float 或 double,则执行浮点相等测试。
\n请注意,二进制数字提升执行值集转换 (\xc2\xa75.1.13) 和拆箱转换 ( \xc2\xa75.1.8 )。
\n
(我已经链接了第 5.1.8 节,因为这就是关于从可用Integer到int可用的转换的内容。)
| 归档时间: |
|
| 查看次数: |
6189 次 |
| 最近记录: |