测试中的类Hello

时间:2015-03-11 12:01:00

标签: java

我在测试中遇到过这个问题:

class Hello {
    public static void main(String[] args){
        String hello = "Hello", lo = "lo";
        System.out.println(hello == ("Hel" + "lo"));
        System.out.println(hello == ("Hel" + lo));
        System.out.println(hello == ("Hel" + lo).intern());
    }
}

输出结果为:

true
false
true

为什么第二个输出false

4 个答案:

答案 0 :(得分:5)

它打印'false',因为String常量“Hel”和String对象'lo'的串联导致一个seaparate,匿名字符串对象,具有自己唯一的对象引用。因此,“hello”String对象和连接字符串是基于对象引用的不同对象(==运算符,而不是String.equals()的String值。)

答案 1 :(得分:2)

==比较双方的参考文献。

这里,对于hello == ("Hel"+lo),双方的引用并不相同。因此,它返回false

要比较值,请使用equals()方法。

答案 2 :(得分:1)

我认为这是因为在第二个输出中(" Hel" + lo)在字符串中不再存在。平等" =="运算符比较对象的内存位置而不是String的字符。默认Java将所有字符串文字放入字符串池,但你也可以通过调用java.lang.String类的intern()方法将任何字符串放入池中,就像使用new创建的字符串一样()运算符。

答案 3 :(得分:1)

我认为这是比较文字问题。

有效。

System.out.print((hello.equals("Hel"+lo)) + " "); 
System.out.print((hello == ("Hel"+"lo")) + " ");