我有以下代码:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
Integer foo = new Integer(1);
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下:
2. true
Run Code Online (Sandbox Code Playgroud)
但是,更改Integer objectto 的类型int将产生不同的输出,例如:
public class Test {
public static void main(String[] args) {
Integer alpha = new Integer(1);
int foo = 1;
if(alpha == foo) {
System.out.println("1. true");
}
if(alpha.equals(foo)) {
System.out.println("2. true");
}
}
}
Run Code Online (Sandbox Code Playgroud)
新输出:
1. true
2. true
Run Code Online (Sandbox Code Playgroud)
怎么会这样呢?为什么第一个示例代码没有输出1. true?
mer*_*ike 34
对于引用类型,==检查引用是否相等,即它们是否指向同一对象.
对于基本类型,==检查值是否相等.
java.lang.Integer是一种参考类型.int是一种原始类型.
编辑:如果一个操作数是基本类型,而另一个操作数是打开合适的基元类型,==则会比较值,而不是引用.
整数对象是对象.这听起来合乎逻辑,但却是问题的答案.对象使用new关键字在Java中生成,然后存储在内存中.比较时,比较对象的内存位置,而不是对象的值/属性.
使用该.equals()方法,您实际上比较了对象的值/属性,而不是它们在内存中的位置:
new Integer(1) == new Integer(1)返回 false,同时new Integer(1).equals(new Integer(1))返回true.
ints是java的原始类型.创建int时,引用的所有内容都是值.当您比较Java中的任何基本类型时,所有比较的是值,而不是内存位置.这就是为什么5 == 5总是返回true.
将Integer对象与基本类型进行比较时,如果可能,将对象强制转换为基本类型.使用a Integer和a int这是可能的,因此将它们进行比较.这就是为什么Integer(1).equals(1)返回true.
| 归档时间: |
|
| 查看次数: |
34742 次 |
| 最近记录: |