Em estudo vi um exercício que me deixou um dúvida. Não recordo exatamente qual era o exemplo, mas consistia em algo semelhante ao exemplo que darei abaixo e gostaria de validação no entendimento.
Enunciado
Quantas strings foram criadas no código abaixo?
class Main{
public static void main(String... args){
String str = "Crepúsculo";
String str2 = new String("Crepúsculo");
}
}
Pelo que percebo a resposta seria duas strings criadas, sendo uma literal e outra indireta - a primeira armazenada na string pool, já a segunda armazenada na heap. Acredito que seja essa a resposta correta porque a string Crepúsculo já havia sido criada na linha 3, portanto ao ser passada como argumento seria utilizada a referência da string já existente na string pool.
Dada minha explicação para a resposta gostaria de uma validação para a interpretação no parágrafo anterior, para saber se analisei corretamente.
Para fins exemplificativos entendo que a resposta seria diferente no exemplo do código abaixo:
class Main{
public static void main(String... args){
String str3 = "Lua Nova";
String str4 = new String("Eclipse");
}
}
Neste último caso a resposta seria a criação de três strings:
- linha 3 ("Lua Nova");
- linha 4 (objeto criado com new);
- linha 4 (a string "Eclipse" era inexistente na string pool, portanto foi criada na string pool no momento que passada como argumento do construtor).
Destarte, solicito avaliação do entendimento passado acima e correção, no caso de haver falhas.
Agradecido.