Criando Strings (cert. scjp)

Estou estudando para certificação e me ocorreu uma dúvida que não consigo entender…

String s1 = "abc";

Nesse caso é criada a string "abc"no pool constante de strings, mas este pool está fora do heap?

String s2 = new String("abc");

Nesse caso o livro diz: “Java criará um novo objeto String na memória comum (e não no pool) e s2 o referenciará. Além disso a string literal “abc” será inserida no pool.”. Agora complicou!

Pergunta: se eu não der new String(“alguma coisa”) o objeto não será instanciado na memoria? Do contrario, a variavel de referencia fará referencia direta ao pool? Se o new String cria dois objetos na memoria, qual será referenciado?

Grato desde já aos Javeiros que puderem colaborar.

o referenciado, no caso em q vc dá o new, sera o que não está no pool. Para testar isso, vc poderia fazer um s1==“abc” para conferir que apontam para referencias diferentes. E se vc nao der o new, a variavel tera como referncia aquela do pool. tanto que se vc fizer s1=“a”, s2= “a”, vai ver que s1=s2 retorna verdadeir, se fizer as instanciacoes com o new, vera que retornará falso.