2014-05-02 6 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)); 
    } 
} 

WYJŚCIEAt String s1 = "str" ​​+ s.length(); wartość s1 = STR4 ale okazuje się fałszywe w następnej deklaracji sysout podczas kontroli równości

(s==s1)false 

(s==s1)true 

Na String s1 = "str" ​​+ s.length(); wartość s1 = STR4 ale okazuje się fałszywe w następnej deklaracji sysout podczas podwójnie równe (==) sprawdza

*/

+1

@delnan Naprawdę, przeczytaj to jeszcze raz. –

+3

Zdecydowanie jest duplikatem, ale nie tym. –

+1

@AnubianNoob i inne: pytanie, o które pytano, nie jest dosłownie takie samo, ale podstawowy problem jest taki sam, a odpowiedzi na nie całkowicie odpowiadają. – delnan

Odpowiedz

10

to dlatego "str" + "4" jest kompilowany jako "str4".

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

dla kompilatora, to będzie:

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

Zauważ, że "str4" jest ciągiem znaków i zostanie on zapisany w basenie String.

+3

To jest poprawna odpowiedź. – iamnotmaynard

Powiązane problemy