Dúvida com Strings

5 respostas
R

Bom dia pessoal, estou fazendo o TestKiller e me deparei com a seguinte questão:

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. }

How many String objects will be created when this method is invoked?
A. 1
B. 2
C. 3
D. 4
E. 5
F. 6

Eu marquei a letra E, um pouco em dúvida se poderia ser a F, contando com o s.toString() que não sei se é criado uma nova String.

Porém a resposta que ele me dá é a letra C… e eu não entendi isso.

No livro da Kathy tem o seguinte exemplo:

String s1 = "spring ";
    String s2 = s1 + "summer ";
    s1.concat("fall ");
    s2.concat(s1);
    s1 += "winter ";
    System.out.println(s1 + " " + s2);
What is the output? For extra credit, how many String objects and how many

reference variables were created prior to the println statement?

Answer: The result of this code fragment is "spring winter spring summer". There

are two reference variables, s1 and s2. There were a total of eight String objects
created as follows: “spring”, “summer " (lost), “spring summer”, “fall” (lost), “spring
fall” (lost), “spring summer spring” (lost), “winter” (lost), “spring winter” (at this point
"spring” is lost). Only two of the eight String objects are not lost in this process.

Gostaria que vocês pudessem me ajudar a entender.

Obrigado,

Rafael.

5 Respostas

anderson.bonavides

Da uma olhadinha ai no site que essa pergunta já foi postada aki no guj.

guivirtuoso

String’s sao imutaveis, ou seja, seus valores nuncam mudam.

Aparentemente quando vimos algo como:

String s = "guilherme"; s = "Outro nome";

A impressão que temos é que a String s mudou de valor. Na realidade o que aconteceu é que ela mudou a sua Referencia. Do objeto String(“Guilherme”) p/ objeto String(“Outro nome”).

Por isso comandos como o do exemplo citado… (s1.concat("fall ")) cria um novo objeto em memoria, mas como a reference desse objeto novo não foi atribuido ao s1, ela permanece com seu valor original.

Para alterar o valor de s1 teria que ser s1 = s1.concat("fall "). O que ainda assim não alteraria o valor do Objeto "spring " e sim criaria um novo objeto que seria referenciado por s1.

Espero ter ajudado.

R

Cara me desculpa, realmente não vi, de qualquer forma acessei o outro tópico e continuo com dúvida

Pois o exemplo do livro são criado 8 objetos… e nesse apenas 3? sendo os dois parecidos (em conceito)

Pelo meu pensamento, um dos dois tem que estar errado.

guivirtuoso

Eu entendi isso das strings imutáveis. O que eu não entendi é como foram criados apenas 3 objetos…

Obs.: Se for pra eu postar isso la no outro tópico, me avise que eu posto la e peço algum moderador pra pagar aqui, não sei…

Desculpem pelo incoveniente.

Rafael.

S

Fred
47
Fred47
(substring)
(substring com uppercase)

toString() não cria.

anderson.bonavides

A mesma questão. Da uma olhada pode ser que te ajude.

http://www.guj.com.br/posts/list/73186.java#384644

http://www.guj.com.br/posts/list/82571.java#440219

Bons estudos.
:wink:

Criado 14 de março de 2008
Ultima resposta 14 de mar. de 2008
Respostas 5
Participantes 4