2016-03-29 35 views
0
String string1="Hello Snehal"; 
String string2=new String("Hello Snehal"); 
String string3=string2.intern(); 


System.out.println("string1==string2 " + string1==string2); // false. OK. 
System.out.println("string2==string3 " + string2==string3); // false. OK. 
System.out.println("string1==string3 " + string1==string3); // false. why not TRUE? 

搜索时澄清,如其他问题When should we use intern method of String on String constants,仍然没有得到关于第三宗案件的线索。字符串实习生的行为?

+0

'=='的优先级低于'+'。考虑'a + b == c',你期望这是'(a + b)== c'不是'a +(b == c)' –

+0

感谢您的快速解释! :) –

回答

4

他们都是false,因为所发生的事情是很少检查是否:

  • "string1==string2 " + string1string2(第一个语句)
  • "string2==string3 " + string2string3(对第二个)
  • "string1==string3 " + string1是指string1(最后一个)。

你需要用的stringX == stringY件,否则字符串连接会首先发生(如你可能已经知道,Java中的语句从左至右,并与支架()包裹其中的一些让他们优先级评估)。

所以,有这样的:

System.out.println("string1==string2 " + (string1==string2)); 
System.out.println("string2==string3 " + (string2==string3)); 
System.out.println("string1==string3 " + (string1==string3)); 

应该表现不同,那么你应该能够调查输出。

1

String.intern()上的绳子将确保具有相同内容的所有串共用相同的内存。有关更多详细信息,请参阅javadoc