Pergunta sobre Strings

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

Se Strings são imutáveis, qual a explicação para a resposta ser C apenas 3… eu contei ai pelo menos 5 Strings…

Alguém sabe??

[]'s

A variável s começa referenciando a String “Fred”.
Depois, é criada uma String “Fred47” e s começa a referenciá-la.
O método substring não cria uma String nova, apenas retorna um intervalo de caracteres de uma String já existente.
O método toUpperCase() altera uma String existente, logo, é criada outra String.
return s.toString() não tem efeito de criação pois s já é uma String.
Entendo que seja isso.

^^

Mas e essa String “47”, ela não é criada tb?

Pela pergunta, devemos ver quantos objetos de string na memória foram criados.

Eu vejo os tres:

“fred” - “47” - s.toUpperCase()

Hum, acredito que não.
Mas, mas não tenho certeza.

:roll:

Bom essa questão não deve estar levando em conta o pool de constantes String… sei lá tb… Mas faz sentido sua resposta felipemartinsss, valeu!

Creio que o felipemartinsss esta correto.

Cara tá estranho ser 3.

Alterar uma String? String num é imutável?

É os objetos: s + “47” e s.substring(2, 5)

na API diz:
substring(int, int)->Returns a new string that is a substring of this string.

E a soma de duas String, gera uma nova String.

Pensando no pool de String, nao consigo achar que sejam 3. Pq no pool ter’a
"Fred", Fred47, “ed4”, “ED4”

É sim, mas por não ser atribuida a nada, será retirada do pool.

ViniGodoy, então, essa pergunta está bastante nebulosa rsrs, típico… Neste caso ele levou em conta apenas as que permanerecem no Pool… Creio que seja isso…

3 objetos em mamória:
Fred
47
Fred47
:wink:

é…acho que é o que o Márcio Nogueira falou mesmo…

Talvez aqui ajude um pouco:

http://www.guj.com.br/java.tutorial.artigo.103.1.guj

Parte da dificuldade dessas provas está em descobrir o quão idiota o cara que elaborou a pergunta é.