以下三个代码段的输出结果是什么?

时间:2013-11-13 13:23:00

标签: java string pool

我目前正在学习Java的自学课程,并且完全难以理解其中一个问题,并且想知道是否有人可以帮助我看到感觉......

问题:以下三个代码段的输出是什么?充分解释差异。

public static void method2(){ 

    String mystring1 = "Hello World"; 

    String mystring2 = new String("Hello World"); 

    if (mystring1.equals(mystring2)) { 

        System.out.println("M2 The 2 strings are equal"); 

    } else { 

        System.out.println("M2 The 2 strings are not equal"); 

    } 

}

public static void method3(){ 

    String mystring1 = "Hello World"; 

    String mystring2 = "Hello World"; 

    if (mystring1 == mystring2) { 

        System.out.println("M3 The 2 strings are equal"); 

    } else { 

        System.out.println("M3 The 2 strings are not equal"); 

    } 

}

我给出的答案:

方法2:     “M2 2弦相等” 它返回相等,因为即使它们是两个单独的字符串,(mystring1.equals(mystring2))也会识别出两个字符串具有完全相同的值。如果在这里使用==它返回不相等,因为它们是两个不同的对象。

方法3:     “M2 2弦相等” 2个字符串是相同的,因为它们都指向池中完全相同的字符串。这里使用==使它看两个值,它识别出它们都具有完全相同的字符。它识别Hello World已经在池中,因此它将myString2指向该字符串。

我对自己的回答非常有信心,但这是错误的。有什么帮助吗?

3 个答案:

答案 0 :(得分:0)

前两个是平等的,后两个不是。但除非你把它放到main()方法中,否则根本就没有输出。

编辑:第二对不一样,因为“==”比较内存中的地址。

答案 1 :(得分:0)

你对第一个是正确的。 然而第二个将返回“M3 2个字符串不相等”。 这是因为==测试参考相等性,因为它们是两个不同的变量,它们不相等。

答案 2 :(得分:0)

两者都会返回true。

1)创建了2个新的字符串对象,但使用.equals表示比较它们的实际值。这是平等的。

2)创建了1个新的字符串对象,因为它们在编译时都是常量。这将导致它们指向同一个对象。

这句话可能是你的问题:

  

==在这里使用它来查看这两个值并且它识别它们都具有完全相同的字符。

==检查引用相等性,而您正在描述值相等。