11. public String makinStrings() {
12. String s = "Fred";
13. s = s + "47";
14. s = s.substring(2, 5);
15. s = s.toUpperCase();
16. return s.toString();
17. }
How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
De acordo com o testkiller a resposta é a “C”. Mas estou em dúvida.
Eu enxergava da seguinte forma:
Na linha 12 já temos um “objeto”;
Na linha 13 temos mais 2, o “47” e o novo resultando da concatenação (s + “47”)
Na linha 14 um novo objeto criado "com algumas partes da string"
Na linha 15 um novo objeto criado “Em caixa alta”
Resumindo, na eu vejo 5 objetos strings criados. :?: :?:
Eu crieo que a resposta correta é 5 mesmo.
Qual testKiller você pegou?
Então, eu tenho duas versões. Estou estudando a 1ª delas V5.
Bom cara, eu fiz esse teste aqui…
[code]class Teste {
public static void main(String args []) {
String s = “Fred”;
System.out.println(s.hashCode());
s = s + "47";
System.out.println(s.hashCode());
s = s.substring(2, 5);
System.out.println(s.hashCode());
s = s.toUpperCase();
System.out.println(s.hashCode());
//return s.toString();
}
}[/code]
Resultado:
2198155
2112428622
100213
68469
Deram quatro hash diferentes… Não sei se o teste é esse mesmo.
gabrielmskate
faltou o hash da string “47”
[quote=robinsonbsilva]
11. public String makinStrings() {
12. String s = "Fred";
13. s = s + "47";
14. s = s.substring(2, 5);
15. s = s.toUpperCase();
16. return s.toString();
17. }
How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
De acordo com o testkiller a resposta é a “C”. Mas estou em dúvida.
Eu enxergava da seguinte forma:
Na linha 12 já temos um “objeto”;
Na linha 13 temos mais 2, o “47” e o novo resultando da concatenação (s + “47”)
Na linha 14 um novo objeto criado "com algumas partes da string"
Na linha 15 um novo objeto criado “Em caixa alta”
Resumindo, na eu vejo 5 objetos strings criados. :?: :?:[/quote]
Ta certo,
- String s = “Fred”; aqui tem 1 objeto { s }
- s = s + “47”; aqui tem 2 { “47” e o resultado da contatenação }
3 objetos criados
[quote=alisonrodrigues][quote=robinsonbsilva]
11. public String makinStrings() {
12. String s = "Fred";
13. s = s + "47";
14. s = s.substring(2, 5);
15. s = s.toUpperCase();
16. return s.toString();
17. }
How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
De acordo com o testkiller a resposta é a “C”. Mas estou em dúvida.
Eu enxergava da seguinte forma:
Na linha 12 já temos um “objeto”;
Na linha 13 temos mais 2, o “47” e o novo resultando da concatenação (s + “47”)
Na linha 14 um novo objeto criado "com algumas partes da string"
Na linha 15 um novo objeto criado “Em caixa alta”
Resumindo, na eu vejo 5 objetos strings criados. :?: :?:[/quote]
Ta certo,
- String s = “Fred”; aqui tem 1 objeto { s }
- s = s + “47”; aqui tem 2 { “47” e o resultado da contatenação }
3 objetos criados
[/quote]
Ora, e subtstring e toUpperCase ? Também não criam novos objetos ?
Até onde eu sei não, contatenações com string sim, se usar StringBuffer ou StringBuilder não cria novos objetos.
No eu jurava que era criado “1” objeto somente, e a cada linha ele mudava o valor desse objeto.
É senhores, se tratando de “String” é isso mesmo. “Cinco objetos criados” (Objetos String’s são imutáveis)
Strings são imutáveis…
Mas voltando ao assunto, tem uma explicação longa em outro tópico: http://www.guj.com.br/posts/list/125340.java
robson agora vc me ajudou rs, como objetos Strings são imutaveis ao inves de mudar o seu conteudo ele cria um novo objeto.
Mas pelo que eu estou entendendo (pelas pequisas no goolge e aqui no GUJ), “Fred” e “47” são criadas no pool de String antes do programa rodar. E não são objetos novos.
Sendo assim eu mudo minha opinião, e acho que são 3 objetos.
gabriel eu olhei tb, no link que vc mostrou ai, realmente são 3.
Boa tarde senhores,
Me perdoem pelo tópico “duplicado”, tem uma mesma thread idêntica. :oops:
So para concluir o pensamento. De acordo com o livro SCJP, quando o compilador encontra uma String literal, verifica no pool para ver se já existe, caso sim, a referencia apontará para ela sem criar um novo objeto String