0

我目前正在学习 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 The 2 strings are equal” 它返回 equal,因为即使它们是两个单独的字符串, (mystring1.equals(mystring2)) 也可以识别出这两个字符串具有完全相同的值。如果在这里使用 == 则返回不相等,因为它们是两个不同的对象。

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

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

4

3 回答 3

0

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

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

于 2013-11-13T13:25:02.740 回答
0

你是对的第一个。然而,第二个将返回“M3 2 个字符串不相等”。这是因为 == 测试引用相等,并且因为它们是两个不同的变量,所以它们不相等。

于 2013-11-13T13:25:17.820 回答
0

两者都将返回 true。

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

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

这句话可能是你的问题:

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

==在您描述值相等时检查引用相等。

于 2013-11-13T13:29:11.850 回答