[quote=Marcio Duran][quote=ChronoTrigger]
O compilador não vai pré-julgar uma coisa dessas, senão questões como esta não existiriam, pois dependeriam daquilo que o compilador acha que é o correto.
[/quote]
Kathy Sierra
Bert Bates
:idea: Para tornar a linguagem Java mais eficiente no uso da memória, o JVM deixa reservada uma área especial chamada “Pool constante de String”.Quando o compilador encontra um string literal, verifica o pool para ver se já existe uma idêntica.
When the compiler encounters a String literal, it checks the pool to sec if an identical String already exists.
:arrow: Isso pode ser considerado não como pré-julgar, mas sim algo preempitivo pela regras da VM aos objetos String e a memória.[/quote]
Pessoal, a checagem de String literais que vão para o POOL é feito em tempo de compilação, ou seja, a resposta é 3, vou explicar-lhes o porque.
Essa questão realmente é muito, digamos, sacana, mas vamos a ela…
A pergunta diz: “Quantos objetos String são criados quando o MÉTODO É INVOCADO?”
O compilador ao compilar essa classe, encontra essas 2 String literais, “Fred” e “47” e já as coloca no Pool de Strings! Sendo assim, [B]ANTES da INVOCAÇÃO[/B] do método, essas 2 String já foram criadas. Então, ao invocar o método, são criadas as outras 3 Strings que foram ditas, por mim, no primeiro post fazendo a questão correta.
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. }
eu tinha dito o seguinte:
[quote]
linha12, criamo a string “Fred”.
linha 13, criamo a string “47” e "Fred47"
linha 14, criamo a string "ed4"
linha 15, criamo a string "ED4"
linha 16, retornamos “ED4” mas essa string já se encontra no pool, então não criamos um novo Objeto. [/quote]
Mas diante do descoberto, 2 dessas Strings já foram criadas antes da invocação! Ou seja, fica assim:
[quote]
linha12, pegamos a String “Fred” do Pool
linha 13, pegamos a string “47” do Pool e criamo a string "Fred47"
linha 14, criamo a string "ed4"
linha 15, criamo a string "ED4"
linha 16, retornamos “ED4” mas essa string já se encontra no pool, então não criamos um novo Objeto. [/quote]
Resultado: 3
Delvish question!
Será que cai algo assim na certificação? Vocês, certificados, iluminem essa minha dúvida