Além de criar um novo objeto, a String Fred47 será inserida no pool de strings??? [/quote]
Não; durante o tempo de execução, só conseguimos inserir uma string no pool usando o método “intern”. Por exemplo:
String s = Integer.toString (51966, 16); // deve gerar a string "cafe"
String t = s.intern(); // t recebe uma instância da string "cafe" que foi posta no pool.
// Note que s.intern() não é que põe a string s no pool;
// ela faz uma cópia da string s, e põe essa cópia no pool.
// Se a string "cafe" já existir no pool, retorna a cópia do pool.
[quote]
E se logo a seguir ou em outro método eu tiver
String k = "Fred";
k = k + "47";
E neste caso, a JVM irá criar um novo objeto string, ou primeiro irá no pool para verificar se já não existe uma string Fred47 e apontar para ela???
Grato.[/quote]
A JVM, por razões de desempenho, nunca fica procurando primeiro as coisas no pool.
Ela só procura no pool se você usar o método “intern”.
No livro da Kathy, neste trecho de código diz que foram criados 8 objetos String:
1-“spring”, 2- “summer”(perdido), 3-“spring summer”, 4-“fall”(perdido), 5-“spring fall”(perdido), 6-“spring summer spring”(perdido), 7-“winter”(perdido), 8-“spring winter” (nesse ponto “spring foi perdido”). mas apenas 2 continuam com referências válidas.
Este código, estaria errado? Pois como vc disse(se entendi direito) o código String s1 = "spring"; não cria de fato um objeto já que a JVM irá inserir no pool, fazendo s1 apenas referenciar a String “spring”.
Confesso que relendo o seu post e agora tentando entender o livro, acabei ficando bem confuso.
Daria pra vc explicar o que de fato ocorre e quantos objetos são criados e em quais linhas???
Note que as seguintes strings foram criadas e estão no pool antes da execução deste método:
“spring”
“summer”
“fall”
" "
“winter”
String s1 = "spring"; // puxando a string "s1" do pool
String s2 = s1 + "summer"; // criando um StringBuilder, inicializando-o com s1,
//chamando o método append com o parâmetro "summer" (que vem do pool),
// e então chamando o método "toString" de StringBuilder. A 1a. string criada
// é "springsummer".
s1.concat("fall"); // criando o 2o. objeto String "springfall", que é perdido
s2.concat(s1); // criando o 3o. objeto String "springsummerspring", que é perdido
s1 += "winter"; // criando o 4o. objeto "springwinter", e deixando de referenciar
// o objeto "spring" do pool
System.out.println(s1 + " " +s2); // criando um StringBuilder, inicializando-o
// com s1, chamando o método append com o parâmetro " ", chamando
// o método append com o parâmetro s2, e então chamando o método
// "toString" de StringBuilder. A 5a. string criada é "springwinter springsummer"
Então thingol, eu havia chegado também a 4 objetos criados.
Mas o livro diz 8 objetos.
Enfim na prova se aparecer uma questão desse tipo eu vou considerar o que você explicou.
fiz uma classe e quero ver se entendi mesmo… ai thingol se puder dar uma olhada e me ajudar ai =)
package pct01;
public class Str {
void methodA(){
/*
* cria um obj string qnd a class e carregada pela VM
* e inseri esta no Pool...
* porem na hora da execuçao deste metodo
* não e criado nehum Obj... certo?
*/
String s = "Eu";
/*
* aqui mesma coisa... cria "Mesmo" e coloca no pool na hora do classload
* e cria um obj "Eu Mesmo" em tempo de execução
*/
s = s + "Mesmo";
/*
* então ele cria 2 obj na hora do classload
* e cria apenas 1 na hora da execução
* e isso? help!!!
*/
}
public static void main(String[] args) {
new Str().methodA();
}
}
=)
então se perguntarem no exame… qnts obj são criados respondo 3…
agora se perguntarem qnts obj são criado na execução do metodoA respondo 1
seria isso?