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