澄清java中的“==”运算符

时间:2014-05-25 08:22:32

标签: java

    Integer i = new Integer(10);
    Integer j =10;
    System.out.println(i==j); // false

    String a1 = new String("abc");
    String a2 = "abc";
    System.out.println(a1==a2); // false

但为了提高Java的内存效率,JVM预留了一个特殊的内存区域,称为" String常量池。"当编译器遇到String文本时,它会检查池以查看是否已存在相同的String。如果找到匹配项,则对新文本的引用将定向到现有String,并且不会创建新的String文本对象。 (现有的String只有一个额外的引用。)所以字符串文字是不可变的。因此,a1和a2都有两个引用指向相同的内存位置,然后为什么" =="没有回复吗?

1 个答案:

答案 0 :(得分:2)

这是因为a1不是文字。它是您在字符串池之外的堆上创建的新String。您使用的构造函数实际上将String复制到新位置。但是,a2位于字符串池中。