Quindi sto studiando per SCJP dal libro di Kathy Sierra. Nel capitolo per le stringhe, questa è una domanda:Le stringhe utilizzate in un System.out.println creano anche nuovi oggetti immutabili?
String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat("fall ");
s2.concat(s1);
s1 += "winter";
System.out.println(s1+" "+s2);
---------------------------
What's the output, and how many string objects and ref variables are created?
L'uscita è primavera estate inverno primavera e ci sono due variabili di riferimento, va bene.
Quindi dice che ci sono otto oggetti stringa creati (primavera, estate, primavera estate ... ecc.) INCLUSI quelli che si perdono a causa del fatto che nulla li fa riferimento.
Tuttavia, non include nulla dall'ultimo sysout.
La mia domanda è, nell'ultima riga di codice, poiché s1 e s2 sono concat con uno spazio, non crea anche nuovi oggetti? O sarà semplicemente passato al buffer delle stringhe per la visualizzazione e non creare nuovi oggetti?
Questo è ovviamente molto semplice e ho cercato altrove ma nulla ha risposto direttamente a questo. Dalla mia comprensione, dovrebbe creare anche nuovi oggetti, ma devo essere sicuro per l'esame! Pensieri?
Grazie, in anticipo!
Compilare il codice sopra, alimentarlo con 'javap -c' e controllare quale codice di codice compila. Dovrebbe essere un 'StringBuffer' implicito che alla fine viene chiamato' toString() ', che dovrebbe rispondere alla domanda. – millimoose
(Inoltre, la domanda è come tutto ciò che è sbagliato con la certificazione.Che cosa significa anche che una variabile di riferimento sia * creata *? Sono costrutti in fase di compilazione, sono dichiarati al meglio. C'è anche l'ambiguità che si genera dal momento in cui vengono creati string letterali, sicuramente vengono creati prima dei risultati delle operazioni di manipolazione delle stringhe. – millimoose
@millimoose Penso che queste domande siano progettate per testare le tue conoscenze sull'istanza degli oggetti, le costanti jvm e String - tutte le aree molto valide :) – vikingsteve