Java “为什么程序会打印”;“真的”&引用;真的;?

Java “为什么程序会打印”;“真的”&引用;真的;?,java,Java,可能重复: 为什么要打印此代码 真的 真的 要比较对象,我们使用方法equals()。但是为什么这样就可以呢 System.out.println(st1 == st2); st1存储在字符串常量池中(首次创建时);当编译器看到st2=“abc”时,它只会将st2指向字符串常量池中先前创建的对象。 i、 例如,st1和st2指向字符串常量池中的同一对象(“abc”),并且=运算符检查两个参考变量是否指向同一对象 System.out.println(k1 ==

可能重复:

为什么要打印此代码

真的

真的

要比较对象,我们使用方法equals()。但是为什么这样就可以呢

        System.out.println(st1 == st2);
st1存储在字符串常量池中(首次创建时);当编译器看到
st2=“abc”
时,它只会将st2指向字符串常量池中先前创建的对象。 i、 例如,st1st2指向字符串常量池中的同一对象(
“abc”
),并且
=
运算符检查两个参考变量是否指向同一对象

        System.out.println(k1 == k2);
在这种情况下,您的包装器实例被缓存到较小的范围,因此
=
返回true。

1)两个字符串都将被视为字符串文本,它们将被插入并存储到相同的内存位置

=
检查引用是否相等,因此两个引用都指向同一个对象并返回true


2)
Integer
实例缓存的范围很小,这就是为什么
k1==k2
100
返回true的原因。因为字符串是硬编码的,所以它们是内部的,并且都使用相同的引用,因此第一个为true。此外,整数缓存常用的数字,因此两个整数也引用同一个对象,这使得第二个引用比较为真。

您期望得到什么以及为什么?因为字符串文字和小整数是内部的。而且:。然后:@LukasEder谢谢你的链接!!Java整数常量池:
        System.out.println(k1 == k2);