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…
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.
^^
marciorodr0
Mas e essa String “47”, ela não é criada tb?
phpinheiro
Pela pergunta, devemos ver quantos objetos de string na memória foram criados.
Eu vejo os tres:
“fred” - “47” - s.toUpperCase()
felipemartinsss
Hum, acredito que não.
Mas, mas não tenho certeza.
:roll:
marciorodr0
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!
G
gumatias
Creio que o felipemartinsss esta correto.
rafaelsantos1983
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”
ViniGodoy
É sim, mas por não ser atribuida a nada, será retirada do pool.
marciorodr0
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…