2012-05-31 16 views
5

Eventuali duplicati:
What is the purpose of the expression “new String(…)” in Java?Quando dovrei usare String s = new String ("Hello World")?

So che String s = new String("Hello World") deve essere evitato in quanto creerà spazio per "Ciao Mondo", che è inutile nella maggior parte dei casi.

questione connessa spiegando perché String s = new String("Hello World") dovrebbe essere evitato è qui:

What is the difference between "text" and new String("text")?

Ma quando abbiamo bisogno di usare String s = new String("Hello World"), invece di String s = "Hello World"? Questa è una domanda di intervista che ho vissuto.

Se nella maggior parte dei casi è consigliabile evitare String s = new String("Hello World"), perché Java lo consente ancora?

+0

stessa domanda vale per 'nuovo booleano (true)' quando si può fare 'Boolean.TRUE'. – Thilo

+0

Ci sono molti piccoli pezzi di codice che non ti aspetteresti che Java * ti impedisca di scrivere. 'int a = 5 + 1 - 1;' è sciocco, ma legale. –

+1

@Damien_The_Unbeliever: Questo particolare esempio è gestito dal compilatore (mentre 'new String (" s ");') non lo è. – Thilo

risposta

1

1) Stringa s = "testo"; Questa sintassi alloca memoria per "testo" in heap. e ogni volta che assegnerai questo "testo" ad altre variabili, restituirà lo stesso riferimento di memoria ogni volta. per Exp -

String aa = "text"; 
    String bb = "text"; 

    if(aa == bb){ 
     System.out.println("yes"); 
    } else { 
     System.out.println("No"); 
    } 

stamperà - Sì

ma
String s = new String ("text"); Crea sempre una nuova posizione in memoria e restituisce ogni volta un nuovo riferimento. per Exp -

String aa = new String ("text"); 
    String bb = new String ("text"); 

    if(aa == bb){ 
     System.out.println("yes"); 
    } else { 
     System.out.println("No"); 
    } 

stamperà - No

+0

scusa, puoi dare un esempio specifico di quando dovrei usare una nuova stringa? Conosco la teoria alla base, solo la mancanza di esempi –