java - 在Java中将两个“整数”值与“==”进行比较是否安全?
问题描述
我有这个Java代码:
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println(x == y);
}
}
是否保证true
在控制台上打印?我的意思是,它是按值(这是我需要做的)还是通过引用身份比较两个装箱整数?
另外,如果我将它们转换为像这样的未装箱整数,会有什么不同吗
public class Foo {
public static void main(String[] args) {
Integer x = 5;
Integer y = 5;
System.out.println((int) x == (int) y);
}
}
解决方案
不,这不是比较Integer
对象的正确方法。你应该使用Integer.equals()
orInteger.compareTo()
方法。
默认情况下,JVM 将缓存Integer
[-128, 127] 范围内的值(请参阅java.lang.Integer.IntegerCache.high
属性),但不会缓存其他值:
Integer x = 5000;
Integer y = 5000;
System.out.println(x == y); // false
拆箱int
或调用Integer.intValue()
将创建一个int
可以安全地与==
运算符进行比较的原语。但是拆箱 anull
将导致NullPointerException
.
推荐阅读
- javascript - ev.target.id 不返回元素 id
- jquery - var 值在每个语句之外未被识别
- c# - 在 ASP.NET MVC 中使用 TimePicker 和 razor 获取时间跨度类型的值
- android - Android:如何通过浮动上下文菜单项单击获取列表项属性
- hypothesis-test - 如果 A/B 测试的样本量大于总体,你会怎么做?
- c# - IOException: 意外结束 Stream,内容可能已被另一个组件读取
- xaml - 在 Grid 单元格中垂直对齐 BoxView
- reactjs - 无法将 MERN 部署到 heroku
- angular - 构建期间来自 Terser 的运行时错误 --prod
- c# - Entity Framework Core 零或一到零或一关系