ele provavelmente esta considerando que “Fred” é uma constante e esta no pool de constante. mas ai a pergunta ja ficou muito dificil e estranha. nao cai este tipo de pergunta ambigua
cv1
Mais ambiguo ainda eh o “when”, pq se vc considerar quantos objetos sobraram apos chamar o metodo, so ficam dois (“Fred” no pool e “ED4” no retorno).
A menos que, como o pessoal já falou, ele esteja considerando “47” e “Fred” Strings que já estejam no pool e, se estiverem, elas serão somente usadas de lá e não criadas.
T
thingol
publicStringmakinStrings(){Strings="Fred";// "Fred" está no pools=s+"47";// "47" está no pool; criada a string "Fred47"s=s.substring(2,5);// criada a string "ed4"s=s.toUpperCase();// criada a string "ED4"returns.toString();// não foi criada string nenhuma aqui, já que toString() simplesmente retorna "this"}
A resposta é 3 (strings criadas durante a execução do método), mas persistirá após a execução do método apenas uma string (já que “Fred” e “47” já estão no pool), que é o valor “ED4”.
Seria mais cabuloso se ele perguntasse quantos OBJETOS serão criados. Neste caso:
publicStringmakinStrings(){Strings="Fred";// "Fred" está no pools=s+"47";// isto equivale a:/* StringBuilder tmp = new StringBuilder(s); // criado 1 StringBuilder e 1 char[] tmp.append ("47"); // pode ser que seja criado um novo char[] ou não, dependendo do tamanho original do char[] s = tmp.toString(); // criado 1 String e 1 char[] contendo uma cópia do char[] do StringBuilder original*/s=s.substring(2,5);// criada a string "ed4". Note que o char[] é reaproveitado da string original. s=s.toUpperCase();// criada a string "ED4". Neste caso também é criada um novo char[], pois o conteúdo é novo.returns.toString();// não foi criada string nenhuma aqui, já que toString() simplesmente retorna "this"}
Isso cria a incrível quantidade de 7 ou 8 objetos. Mas isso não se pergunta em provas, porque é um detalhe de implementação.
maior_abandonado
bom…antes de tudo eu peço desculpa se seria melhor cria um novo tópico com a mesma duvida e a mesma questão se ja existe um antigo…
bom…meu inglês é fraquinho mais se eu intendi direiro, pergunta quantos objetos do tipo String são criados ao se chamar esse metodo…
considerando que “Fred” e “47” estão no pool são 3… mais a pergunta não especifica que foi criada uma string “Fred” anteriormente, então deduzi que seria criada ai na linha 4 essa string, e então ela mesma estaria no pool de strings…
alguém ai me explica por favor, pq q as strings “Fred” e “42” ja estão no pool, não sendo criadas?? isso q eu não intendi…
PadrE
Opa,
Vou arriscar uma repsosta !!!
Elas ficam no pool porque são constantes com valores já definidos… ou seja, a JVM saca que esses caras nunca serão alterados portanto os joga dentro do pool…
Só não tenho certeza do momento que isso ocorre… se eh qndo o programa eh executado ou quando o método for chamado.
Fui !
maior_abandonado
dexa eu ver se eu intendi…
quando o programa é carregado, ou quando o metodo é carregado, sei la, a jvm coloca essas strings no pool antes mesmo de terem sido criadas no código???
sempre q eu coloca o codigo em um método qualquer String var = "qualquer coisa", a JVM vai criar “qualquer coisa” no pool antes mesmo de chegar na linha que eu faço isso, e então ao chegar enssa linha ela vai aproveita a variavel presente no pool criada anteriormente por ela propria?
é isso mesmo?
PadrE
Opa…
Pra ter certeza seria legal olhar o visualvm, criar uma classe bem simples com algumas variaveis String sem uso e ver o que rola no heap…
Fiz um teste aki com JFrame mas não deu muito certo… tem muuuiiiita classe e String em memória e fica dificil achar as frases que criei… (podia ter um busca nesse visualvm pelo value neh ??)
Quando executei o programa todas as String’s de rótulos foram pro heap… (achei qse todas ^^)
Criei um método sem chamada com algumas variaveis texto dentro… mas esses valores não achei no heap, agora não sei se não achei porque parei de procurar depois de [telefone removido] classes ou se se realmente não foram carregados… ^^
Pra mim, ele é carregado no momento em que a classe for instanciada e fica la até o fim do programa… independente se o código que cria a String foi executado ou não. (o que justificaria a reposta da questão)
Fui !!!
maior_abandonado
cara valeu ai as dicas… vo cria classe aki basicona, sem herança nenhuma exceto object e sem interface grafica, pra tenta não ter os mesmos problemas…
dei uma googadiha de 1 minuto aki pq to indo almoçar sobre o visualvm, depois doalmoço euvo baixa e tentar usa-lo…obrigadão…