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();
}
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.
public String makinStrings() {
String s = "Fred";
s = s + "47"; //1
s = s.substring(2, 5); //2
s = s.toUpperCase(); //3
return s.toString();
}
“Fred47”
“ed4”
“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();
}
“Fred47”
“ed4”
“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.
[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();
}
“Fred47”
“ed4”
“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.