Questao 91 TestKiller

Question 91
Given:
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

Pessoal segundo o TestKiller a resposta certa eh a C.

Alguem pode me explicar porque ???

Grato

Olá MAMS

CREIO eu que essa parte da API responde sua pergunta


The String class represents character strings. All string literals in Java programs, such as “abc”, are implemented as instances of this class.

Strings are constant; their values cannot be changed after they are created. String buffers support mutable strings. Because String objects are immutable they can be shared.

Será que alguem pode confirmar?

Acho que funciona mais ou menos assim:

    public String makinStrings() {
        //cria um objeto String com o valor "Fred" e aponta para a variavel de referencia s
        String s = "Fred";
        //cria um objeto String com o valor "47" 
        //cria um objeto String com o valor "Fred47" e aponta para a variavel de referencia s
        s = s + "47";
        //nao cria objeto, apenas retorna para variavel s os caracteres "ed4"
        s = s.substring(2, 5);
        //nao cria um objeto, apenas retorna para variavel s os caracteres "ED4" (em caixa alta)
        s = s.toUpperCase();
               //não cria um objeto, apenas retorna o valor de s
        return s.toString();
    }

Se estiver equivocado, podem me corrigir ou acrescentar algo.

Eu acho que não me expressei direito ali em cima e não deu pra entender nada… :smiley:

vou se mais especifico…

Como uma String é imutavel e se usa operadores “+” para concatenão e não uma StringBuffer
a JVM cria objetos temporários na memória e a substring tambem retorna um objeto com o valor
especificado.

Então cria-se um objeto quando se cria a String, quando se concatena e quando se usa a substring

Tem certeza que a resposta é 3?

Se eu tivesse que optar, eu optaria por 4.

A resposta é a C mesmo

“Fred” e “47” são criadas no pool de Strings quado a classe é carregada.

É criada uma nova string Fred47 em
s = s + “47”;

É criada uma segunda string ed4 em
s = s.substring(2, 5);

É criada uma terceira string ED4 em
s = s.toUpperCase();

Portanto, são criadas três strings.

Acho que tem alguns tópicos discutindo essa mesma questão por aí

Eu também teria chutado 4…

Fred

Fred47

ed4

ED4

fred
fred47
47