两个不同的内存引用的值相同

时间:2014-06-29 20:08:50

标签: java

如果你写String s = new String(“abc”);在非池(堆)区域中创建两个对象,并且一个在共同的字符串池中(如果它不存在。)假设它创建了两个对象。现在当我创建String literal String s1 =“abc”;现在根据我在字符串池中有一个字符串“abc”并有两个引用s1和s。所以System.out.println(s == s1)它应该给出true但是它给出了假..为什么??

1 个答案:

答案 0 :(得分:1)

两个字符串可能相同的部分是其支持char[]数组值,因此s.equals(s1)。但是使用单独构造函数调用创建的任何对象都不是相同的对象。因为你的s和s1是单独构建的(一个是编译器,另一个是运行时)因此s != s2

尝试以下示例,编译器为两个字符串使用相同的对象(尽管它们是单独声明的),因此s == s1将为true:

public static void main(String[] args) {
    String s = "abc";
    String s1 = "abc";
    System.out.println(s == s1);
}