Dúvida a respeito de String criadas na heap

4 respostas
A

Olá pessoal no livro da kathy, estou estudando sobre Strings (cap 6). Em um determinado momento tem um trecho de código que lança um desafio, descobrir quando Strings e referências foram criadas:

String s1 = "spring ";
String s2 = s1 + "summer ";
s1.concat("fall ");
s2.concat(s1);
s1 += "winter ";
System.out.println(s1 + " " + s2);

No livro diz que a resposta é 8 objetos Strings criados, porém eu contei 9! Eu considerei a String criado no sout. Ai fiquei na dúvida, é criado uma nova String no sout? Pois caso positivo o livro está errado =P

4 Respostas

E
String s1 = "spring "; // a string já está criada antes de chegar a esta linha
String s2 = s1 + "summer "; // criada a string "spring summer" - (1)
s1.concat("fall "); // criada a string "spring summer fall" - (2) - essa string já ficou disponível para garbage collection
s2.concat(s1); // criada a string "spring summer spring " - (3) - mesma coisa
s1 += "winter "; // criada a string ("spring winter") - (4) - note que a string anterior "spring " não está mais referenciada,
System.out.println(s1 + " " + s2); // criada a string ("spring winter spring summer ") - (5) - essa string é usada pelo println, e depois desprezada

Esquisito, contei só 5 - a expressão s1 + " " + s2 é equivalente a:

new StringBuilder (s1).append (" ").append(s2).toString();

que cria apenas uma nova string, não 2 como seria de se esperar. Sei lá, acho que também não estou sabendo contar direito :slight_smile:

A

entanglement, no mínimo 8 tem, eu contei 9…

String s1 = "spring "; // 1 - spring
String s2 = s1 + "summer "; // 2 ? summer, 3 ? spring summer
s1.concat("fall "); // 4 ? fall, 5 ? spring fall
s2.concat(s1); // 6 ? spring summer spring
s1 += "winter "; // 7 ? winter, // 8 ? spring winter
System.out.println(s1 + " " + s2); // 9 ? spring winter spring summer
                                   // essa ultima String o livro não conta
ViniGodoy

Descartando as otimizações (que o entanglement levou em conta), eu contei 10. Agora, sem a linha do println, são só 8 mesmo.

muehlner

Sempre tive duvidas aqui tbm

mais ao meu modo de ver

String s1 = "spring ";  // 1º Primeiro Objeto

String s2 = s1 + "summer ";  // 2 º,  3º  objetos "summer" e "spring summer"

s1.concat("fall ");  // 4º objeto que neste caso fica sem refencia "fall" 5º quinto objeto tbm é criado e fica sem referencia "Spring fall"

s2.concat(s1);   // 6º objeto que tambem fica sem referencia "spring summer spring" aqui só é criado um objeto porque "s1" ja existe na memoria ao contrario de "fall" que foi criado  logo acima

s1 += "winter "; // o mesmo que s1 = s1 + "winter" ou seja 7º e 8º  objetos criados
Criado 6 de outubro de 2012
Ultima resposta 12 de out. de 2012
Respostas 4
Participantes 4