我有一个问题。我不知道这有什么意义,但我真的需要一个答案
当我使用“==”作为
时Integer i1 =10;
Integer i2 = 10;
if(i1 == i2) {System.out.println("same object")}
输出=同一个对象
但是,如果我使用“==”
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1 == obj2)
System.out.println("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
输出= FALSE
我知道“==”运算符会查找对象的内存位置。但是在第一个例子中发生了什么i1和i2不是不同的对象?
答案 0 :(得分:6)
小整数有内部缓存/池。 所以==检查返回true,因为它们指向同一个实际对象。
OP,顺便提一下你的问题是你输入了“if(i1 == 12)”而不是“if(i1 == i2)”。
示例1:
public class Test001
{
public static void main(String args[]) {
Integer i1 = 10;
Integer i2 = 10;
if(i1==i2) {System.out.println("same object 1");}
i1 = 10024;
i2 = 10024;
if(i1==i2) {System.out.println("same object 2");}
}
}
它只打印“同一对象1”,它显示缓存/池点。
将i1和i2分配给文字10这一事实非常重要。 如果你做了新的整数(10),那么他们会指向不同的对象。
示例2:
public class Test001
{
public static void main(String args[]) {
Integer i1 = 10;
Integer i2 = 10;
if(i1==i2) {System.out.println("same object 1");}
i1 = new Integer(10);
i2 = new Integer(10);
if(i1==i2) {System.out.println("same object 2");}
i1 = 10024;
i2 = 10024;
if(i1==i2) {System.out.println("same object 3");}
}
}
这个也只打印“同一个对象1”。
答案 1 :(得分:1)
.equals()
比较String
本身的实际“内容”,而==
检查对象引用是否指向对象的同一实例。