最近我看到这样的代码 -
class Test{
public static void main(String[] args){
String s1 = "String1"; //1
String s2 = new String("String2"); //2
System.out.println(s1.equals("String1"));
System.out.println(s1=="String1"); //3
System.out.println(s2.equals("String2"));
System.out.println(s2=="String2"); //4
}
}
输出是 -
true
true
true
false
到目前为止我知道,在第1点“String1”被放入字符串池中并分配了字符串类型引用变量s1。没有创建任何String对象吗?
我们知道在第 2 点创建了一个新的 String 对象,并且在第 4 点表达式 (s2=="String2") 的计算结果为 false。如果在点 1 创建了一个新的 String 对象,则点 3 处的表达式 (s1=="String1") 如何计算为 true。如果在第 1 点没有创建新对象,第 3 点的表达式 (s1=="String1") 如何计算为 true?
提前致谢
最佳答案
==
比较字符串的引用,用于值比较是不可靠的。您的s1=="String1"
我想这是真的,因为您正在比较两个文字,与 s2
相比。新 String 对象与文字的比较。
关于java - 将字符串与 "=="的引用进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23496954/