java中的字符串文字

时间:2014-08-26 06:11:19

标签: java string

class X
{
    public static void main(String...a)
    {
        String a = "meow";
        String ab = a + "deal";
        String abc = "meowdeal";
        System.out.println(ab == abc);
    }
}

我的输出是假的......为什么。 我准备ocjp。我瘦,我们必须成真。 Beacuse ab包含“meowdeal”。当我试图将“meowdeal”分配给abc时,这个文字已经在字符串池中了。所以ab和abc都指向同一个对象。然后我们必须成真。

4 个答案:

答案 0 :(得分:2)

问题是a不是final会导致编译器优化失效。

如果a不是最终版,则需要进行数据流分析,以确定ab的初始化是特殊的。

    final String a = "meow";
    String ab = a + "deal";
    String abc = "meowdeal";
    System.out.println(ab == abc);
    System.out.println("meow" + "deal" == "meowdeal");

将产生真实+真实。

我可以想象其他 java编译器处理不同的内容。

答案 1 :(得分:1)

请尝试equals()

class X
{
    public static void main(String...a)
    {
        String a = "meow";
        String ab = a + "deal";
        String abc = "meowdeal";
        System.out.println(ab.equals(abc));
    }
}

答案 2 :(得分:0)

==运算符检查两个变量是否引用同一对象。您有两个不同的字符串对象,包含相同的文本。 equals方法将返回true,但==返回false,因为它们是不同的对象(无论其内容如何)。

答案 3 :(得分:0)

==检查引用,而不是对象本身。如果你写

String a = "meow";
String ab = a;

然后

System.out.println(a == ab);

会给你真实的。

如果你想比较字符串,你应该使用equals()。它将是:

String a = "meow";
String ab = a + "deal";
System.out.println(ab.equals(abc));