最近我见过这样的代码 -
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”被放置在String池中并分配了String类型引用变量s1。是否没有创建任何String对象?
我们知道在第2点和第4点创建了一个新的String对象,表达式(s2 ==“String2”)被评估为false。如果在第1点创建了一个新的String对象,那么第3点(s1 ==“String1”)的表达式如何计算为true。如果在第1点没有创建新对象,那么第3点(s1 ==“String1”)的表达式如何评估为真?
先谢谢
答案 0 :(得分:4)
==
比较字符串的引用,并且不可靠用于值比较。你的s1=="String1"
我想象的是真的,因为你比较了两个文字,而新的String对象与文字的比较s2
。