Duvida sobre Strings - Livro Kethy 5

Olá pessoal…

estou lendo o livro e surgiu uma duvido, e resolvi recorrer à vocês. Seguinte: No capitulo 6, mais especificamente na página 241 tenho o seguinte código:

String s1 = "spring "; 
String s2 = s1 + "summer ";

s1.concat("fall ");
s2.concat(s1);
s1 += "winter ";

System.out.println(s1 + " " + s2);

Entendi que os Strings são imutáveis e quando se perde referência ao objeto String. Mas minha duvida esta na quantidade de objetos String criados neste momento.
Resposta dela:

O seguinte código cria um objeto “summer” (perdido) e “spring summer” ou somente cria “spring summer”?

String s2 = s1 + "summer ";

Se o anterior for verdade, por que este código não cria outro objeto String?

System.out.println(s1 + " " + s2);

aiaiai…
estou confuso
espero ter conseguido passar a duvida…
obrigado pessoal
[]'s

e ae Marcos, blz?? Na saída do programa não são criados novos objetos string. Ele apenas coloca na saída padrão os objetos string existentes na memória. Blz? Abraços e bons estudos.

Galera mas e quanto as “string no pool de string”, daí nao seria oito objetos criados não seria?

sim, seria 8 objetos criados…

vmbs e quanto ao pool de strings?

Pois é, aquele código realmente deveria ter criado outro String. O livro inclui ele na contagem?

Vini sao oito String mesmo?

Isso aqui nao entra no pool nao?

Eu contei 10.

[code]String s1 = "spring "; //1. "spring " entra no pool
String s2 = s1 + "summer "; //2 e 3. É criado “summer” e “spring summer”. "summer " entra no pool

s1.concat("fall "); //4 e 5. é criado "fall " e "spring fall ". "fall " entra no pool.
s2.concat(s1); //6. é criado "spring summer spring "
s1 += "winter "; //7 e 8. é criado “winter” e "spring winter ". "winter " entra no pool

System.out.println(s1 + " " + s2); // 9 e 10. É criado " " e “spring winter spring summer”. " " entra no pool
[/code]

O mais provável é que a explicação do livro não leve em conta a linha do println.

Vini uma duvida, as strings no pool como por exemplo:

isso ai nao é criado um objeto nao é?

Se ela já estiver no pool, não. Se não estiver ainda, aí um objeto é criado sim.

String x = "spring"; String y = "spring";

O A primeira linha cria um objeto String, contendo o texto spring. A segunda, só usa o objeto já criado acima.

Ahh ok, vlw Vini.

Mas sendo assim o livro ta errado entao, num ta nao? Pq pela explicaçao clara que vc deu eu entendi tb que sao 10 entao n?

[quote=ViniGodoy]Eu contei 10.

[code]String s1 = "spring "; //1. "spring " entra no pool
String s2 = s1 + "summer "; //2 e 3. É criado “summer” e “spring summer”. "summer " entra no pool

s1.concat("fall "); //4 e 5. é criado "fall " e "spring fall ". "fall " entra no pool.
s2.concat(s1); //6. é criado "spring summer spring "
s1 += "winter "; //7 e 8. é criado “winter” e "spring winter ". "winter " entra no pool

System.out.println(s1 + " " + s2); // 9 e 10. É criado " " e “spring winter spring summer”. " " entra no pool
[/code]

O mais provável é que a explicação do livro não leve em conta a linha do println.[/quote]

Valew pessoal pelas respostas…
minha duvida é exatamente esta!
Também contei 10 na primeira, mas como o vini mencionou pode ser que ela não tenha contado do sysout…
Obrigado…
[]'s

[quote=ViniGodoy]Eu contei 10.

System.out.println(s1 + " " + s2); // 9 e 10. É criado " " e “spring winter spring summer”. " " entra no pool
[/code]
[/quote]

Um dúvida: nessa linha ai em cima não são criadas 3 Strings? Veja:

String 1: " "
String 2: s1+" "
String 3: s1+" "+s2

???

De uma forma geral, quando eu tenho s1 + s2 + s3 + … + sn (onde s é uma String), ele não vai criando objetos a cada operação de concatenação (+)?