Duvida sobre questão do TestKiller

Não entendi a resposta dessa questão. Eu respondi a letra F, pois contei que os metodos, mas a resposta correta e C. Eu me pergunto pq?

public String makinStrings() {
String s = "Fred";
s = s + "47";
s = s.substring(2, 5);
s = s.toUpperCase();
return s.toString();
}

How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6
Answer: C

public String makinStrings() { String s = "Fred"; s = s + "47"; 1 objeto s = s.substring(2, 5); 2 objeto s = s.toUpperCase(); 3 objeto return s.toString(); }

são criado 3 objetos…
ok ?
eu acho que é isso

String s = "Fred";  

Cria a primeira String.

s = s + "47";

Desde o Java 1.0 qualquer concatenação é substituída por StringBuilder em tempo de compilação, o que faz que não seja criada outra String, para melhor desempenho.

s = s.substring(2, 5);

O método substring não altera a mesma String, e sim te retorna uma nova alterada.

s = s.toUpperCase();

Mesmo caso que o substring.

Se eu estiver errado alguém me corrija :lol:

Flw

Será que ninguem sabe me explicar? Alguem ajuda ai!!!

public String makinStrings() {
String s = "Fred";
s = s + "47"; //1
s = s.substring(2, 5); //2
s = s.toUpperCase(); //3
return s.toString();
}
  1. “Fred47”
  2. “ed4”
  3. “ED4”

O método toString() da classe String retorna this, portanto não cria uma nova String.
A String “Fred” e a String “47” já estão no pool de Strings. Elas não são criadas quando o método é invocado, elas são criadas antes e ficam sempre a mesma.

Ou seja, é a letra C. São criadas “Fred47”, “ed4” e “ED4”.

[quote=victorwss] public String makinStrings() { String s = "Fred"; s = s + "47"; //1 s = s.substring(2, 5); //2 s = s.toUpperCase(); //3 return s.toString(); }

  1. “Fred47”
  2. “ed4”
  3. “ED4”

O método toString() da classe String retorna this, portanto não cria uma nova String.
A String “Fred” e a String “47” já estão no pool de Strings. Elas não são criadas quando o método é invocado, elas são criadas antes e ficam sempre a mesma.

Ou seja, é a letra C. São criadas “Fred47”, “ed4” e “ED4”.[/quote]

Mais um duvida

Como vc sabe que “Fred” e “47” estão no pool?
Pelo que eu tinha lido no livro, ele busca no pool quando já existe esse valor, mas se for a primeira vez ele cria no pool. Me explique isso por favor.

Obrigado

[quote=DarkRayman][quote=victorwss] public String makinStrings() { String s = "Fred"; s = s + "47"; //1 s = s.substring(2, 5); //2 s = s.toUpperCase(); //3 return s.toString(); }

  1. “Fred47”
  2. “ed4”
  3. “ED4”

O método toString() da classe String retorna this, portanto não cria uma nova String.
A String “Fred” e a String “47” já estão no pool de Strings. Elas não são criadas quando o método é invocado, elas são criadas antes e ficam sempre a mesma.

Ou seja, é a letra C. São criadas “Fred47”, “ed4” e “ED4”.[/quote]

Mais um duvida

Como vc sabe que “Fred” e “47” estão no pool?
Pelo que eu tinha lido no livro, ele busca no pool quando já existe esse valor, mas se for a primeira vez ele cria no pool. Me explique isso por favor.

Obrigado[/quote]

Simples, são literais escritos diretamente no código-fonte, então estarão no pool. Quando a classe é carregada, estas Strings são criadas.

Agora eu entendi.

Valew.