通过“==”比较字符串与它的引用

时间:2014-05-06 14:03:29

标签: java string string-comparison

最近我见过这样的代码 -

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”)的表达式如何评估为真?

先谢谢

1 个答案:

答案 0 :(得分:4)

==比较字符串的引用,并且不可靠用于值比较。你的s1=="String1"我想象的是真的,因为你比较了两个文字,而新的String对象与文字的比较s2