Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Criação de Strings

Boa noite:

Encontrei uma questão semelhante ao código abaixo em um simulado cujo gabarito diz que são criadas três Strings:

private String metodo() {
    String s = "Bike";                // primeira String criada
    s = s + "65";                           // segunda String criada
    s = s.substring(2, 5);        // terceira String criada
    s = s.toUpperCase();       // quarta String criada
    return s.toString();          // nenhuma String criada
}

Eu entendo que são criadas quatro Strings (nas quatro primeiras linhas do método).

Estou cometendo algum equívoco?

5 respostas

Oi Leonardo, tudo bem?

Será que você pode por o enunciado original da questão aqui para tentarmos entender melhor?

Talvez estejamos deixar algo passar, mas também vejo 4 Strings sendo criadas.

Se tiver a resposta com a explicação também ajuda, só colar aqui, por favor.

Existe alguma chance da questão estar perguntando quantas das Strings são colocadas no pool de Strings?

solução!

Bom dia Leonardo!

Este simulado é do Java 6 ou Java 7?

Pois a implementação do método .substring() foi alterada de uma versão para a outra.

No JDK 6 a função substring não criava uma nova String no Heap, ele criava uma nova referência à array de caracteres com as propriedades de ínicio (offset) e fim (count) alteradas.

.substring() JDK 6

Já no JDK 7 o .substring() cria uma nova String no Heap.

.substring() JDK 7

Boa noite:

Eis abaixo o enunciado da questão original:

Given:

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

Oi Leonardo,

Eu não sabia sobre o que o Phelipe falou.

Você sabe para qual versão do Java esse questionario foi feito? Pois pode ser justamente o que ele disse, caso seja pro Java 6.

No caso, se for pro Java 6, na chamada ao método subString() ele pode não criar uma nova String.

Abraço!

Boa noite:

O simulado não menciona a versão do Java.

Mas depois da explicação de vocês acredito que seja Java 6.

Obrigado pelos esclarecimentos de todos.

Abraços!