为什么会打印此代码
真
是真的
public class Test {
public static void main(String[] args){
String st1 = "abc";
String st2 = "abc";
Integer k1 = 100;
Integer k2 = 100;
System.out.println(st1 == st2);
System.out.println(k1 == k2);
}
}
为了比较对象,我们使用方法equals()。但是为什么这样可以呢?
答案 0 :(得分:2)
==
比较对象引用。因为你是字符串被硬编码,所以它们被实习并且都使用相同的引用,因此第一个是真实的。此外,Integer还缓存常用的数字,因此两个整数也引用相同的对象,这使得第二个引用比较成立。
答案 1 :(得分:1)
System.out.println(st1 == st2);
st1 存储在字符串常量池中(首次创建时);当编译器看到st2="abc"
时,它只会将 st2 指向字符串常量池中先前创建的对象。
即, st1 和 st2 指向String常量池中的同一对象("abc"
),==
运算符检查两个引用变量是否指向同一个对象。
System.out.println(k1 == k2);
在这种情况下,您的包装器实例被缓存到较小的范围,因此==
返回true。
答案 2 :(得分:1)
1)两个字符串都将被视为字符串文字,将被插入并存储到相同的内存位置。
==
检查引用相等性,因此两个引用都指向同一个对象并返回true。
2)Integer
个实例的缓存范围很小,这就是k1 == k2
为100
返回true的原因。