2014-05-02 13 views
5
public class Foo { 

    public static void main(String[] args) { 
     foo(); 
     bar(); 
    } 

    public static void foo() { 
     String s = "str4"; 
     String s1 = "str" + s.length(); 
     System.out.println("(s==s1)" + (s1 == s)); 
    } 

    public static void bar() { 
     String s = "str4"; 
     String s1 = "str" + "4"; 
     System.out.println("(s==s1)" + (s1 == s)); 
    } 
} 

ÇIKIŞDize s1 = "str" ​​+ s.length(); s1 = str4 ama değeri, eşitlik kontrolü sırasında sonraki sysout deyimi de yanlış olduğu ortaya çıkıyor

dize s1 = "str" ​​At
(s==s1)false 

(s==s1)true 

+ s.length(); s1 = str4 değeri ama çıkıyor (==) "str" + "4""str4" olarak derlenmiş çünkü var

*/

+1

@delnan Gerçekten, tekrar okuma. –

+3

Kesinlikle bir kopyası, ancak bunun bir değil. –

+1

@AnubianNoob ve diğerleri: Sorulan soru tam olarak aynı değil, temel sorun aynıdır ve buradaki cevaplar tamamen cevap verir. – delnan

cevap

10

kontrol çift eşit sırasında sonraki sysout deyimi de yanlış olduğu.

String s = "str4"; 
String s1 = "str" + "4"; 

derleyici için, olacak: "str4" bir hazır dize olduğunu ve dize havuzunda saklanır

String s = "str4"; 
String s1 = "str4"; 

Not söyledi.

+3

Doğru cevap budur. – iamnotmaynard

İlgili konular