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

USCITAAlla stringa s1 = "str" ​​+ s.length(); il valore di s1 = STR4 ma si rivela essere falso alla prossima dichiarazione sysout durante il controllo di uguaglianza

(s==s1)false 

(s==s1)true 

A String s1 = "str" ​​+ s.length(); il valore di s1 = STR4 ma si scopre di essere falsa al prossimo comunicato sysout durante il doppio uguale (==) controllare

*/

+1

@delnan Non proprio, rileggilo di nuovo. –

+3

È sicuramente un duplicato, ma non di quello. –

+1

@AnubianNoob e altri: La domanda posta non è la stessa, ma il problema di fondo è lo stesso e le risposte laggiù rispondono completamente. – delnan

risposta

10

Questo perché "str" + "4" è compilato come "str4".

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

per il compilatore, sarà:

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

Nota che "str4" è una stringa letterale e viene memorizzata nella stringa piscina.

+3

Questa è la risposta corretta. – iamnotmaynard

Problemi correlati