Dúvida exercício testkiller[Resolvido]

14 respostas
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  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. :?: :?:

14 Respostas

kaduzick

Eu crieo que a resposta correta é 5 mesmo.
Qual testKiller você pegou?

robinsonbsilva

Então, eu tenho duas versões. Estou estudando a 1ª delas V5.

gabrielmskate

Bom cara, eu fiz esse teste aqui...

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();	
	}
}

Resultado:
2198155
[telefone removido]
100213
68469

Deram quatro hash diferentes.. Não sei se o teste é esse mesmo.

kaduzick

gabrielmskate

faltou o hash da string “47”

alisonrodrigues

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  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. :?: :?:

Ta certo,

  1. String s = “Fred”; aqui tem 1 objeto { s }
  2. s = s + “47”; aqui tem 2 { “47” e o resultado da contatenação }

3 objetos criados

rmendes08

alisonrodrigues:
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  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. :?: :?:

Ta certo,

  1. String s = “Fred”; aqui tem 1 objeto { s }
  2. s = s + “47”; aqui tem 2 { “47” e o resultado da contatenação }

3 objetos criados

Ora, e subtstring e toUpperCase ? Também não criam novos objetos ?

alisonrodrigues

Até onde eu sei não, contatenações com string sim, se usar StringBuffer ou StringBuilder não cria novos objetos.

evertonsilvagomesjav

No eu jurava que era criado “1” objeto somente, e a cada linha ele mudava o valor desse objeto.

robinsonbsilva

É senhores, se tratando de “String” é isso mesmo. “Cinco objetos criados” (Objetos String’s são imutáveis)

gabrielmskate

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

evertonsilvagomesjav

robson agora vc me ajudou rs, como objetos Strings são imutaveis ao inves de mudar o seu conteudo ele cria um novo objeto.

gabrielmskate

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.

evertonsilvagomesjav

gabriel eu olhei tb, no link que vc mostrou ai, realmente são 3.

robinsonbsilva

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

Criado 24 de novembro de 2009
Ultima resposta 24 de nov. de 2009
Respostas 14
Participantes 6