-2

可能重复:
为什么这些 == 而不是 `equals()`?

为什么这段代码会打印

真的

真的

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()。但是为什么这样就可以了?

4

3 回答 3

2

==比较对象引用。由于您是硬编码的字符串,因此它们被实习并且都使用相同的引用,因此第一个是正确的。Integer 还缓存常用数字,因此您的两个 Integer 也引用同一个对象,这使得第二个引用比较为真。

于 2012-11-12T16:08:16.020 回答
1
        System.out.println(st1 == st2);

st1存储在字符串常量池中(首次创建时);当编译器看到st2="abc"它时,它只会将st2指向字符串常量池中先前创建的对象。即,st1st2指向"abc"String 常量池中的同一个对象(),==运算符检查两个引用变量是否指向同一个对象。

        System.out.println(k1 == k2);

在这种情况下,您的包装器实例被缓存到小范围内,因此==返回 true。

于 2012-11-12T16:07:19.613 回答
1

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

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

2)Integer实例被缓存为小范围,这就是为什么k1 == k2返回 true 的原因100

于 2012-11-12T16:07:25.003 回答