taaqui:
Deixa eu fazer uma pergunta para você, se você responder vai conseguir sanar as suas duvidas.
Qual a diferença entre, String p1 = “guj” e String p1 = new String("guj);?
E o que acontece quando eu uso o método intern?
não resolve minha duvida, e sim eu sei a diferença…
String p1 = "guj"; A JVM cria um objeto String (no momento em que a classe é carregada), cuja seu valor é um array char[] = {‘g’,‘u’,‘j’}, o pool de strings mantem uma referencia a este objeto, mesmo que a aplicação nunca passe por este ponto, onde esta descrito, p1 = “guj”, mesmo assim, esse objeto já estara criado, e o pool de string vai ter uma referencia a ele…
quando o aplicativo, passar por este ponto, a JVM vai procurar a referencia no pool de strings, para o valor char[] {‘g’,‘u’,‘j’} e vai passar a referencia para p1… sem criar nenhum objeto a mais neste momento, o objeto ja esta criado, desde a hora que a classe foi carregada…
String p1 = new String("guj"); Muito parecido com o primeiro caso, a string com o valor char[] = {‘g’,‘u’,‘j’} é criada tb no momento que a classe e carregada, sua referencia fica no pool… mesmo antes do aplicativo passar por esse ponto…
porem ao passar pelo ponto do programa, a JVM busca o objeto que esta gurdado no pool, com a referencia a char[] = {‘g’,‘u’,‘j’} … mas não passa a p1, ele passa ao construtor de String(String s) … esse construtor vai construir um novo objeto, para tal ele vai fazer uma copia de da array de char[] {‘g’,‘u’,‘j’} … não será a mesma array, vai ter o mesmo conteúdo, porem é só uma copia… esse novo objeto será passado a p1…
neste segundo caso, exitem 2 strings… uma que o pool de strings faz referencia, outra que p1 faz referencia, as duas são equals, porem não são ==, pois são referencia a objetos diferentes…
…
o método String.intern()… busca no pool de strings por uma referencia igual ao conteúdo da string, não encontrando, ele adciona a propria referencia ao pool, e retorna sempre a referencia do pool…
…
mas a minha pergunta é… as Strings do pool não residem nele não é ??
esta Strings, assim como todos os outros objetos java existem no Heap?
e no pool só há uma lista de referencias para estas Strings, que estão no Heap…
essa é a minha duvida… os objetos, apesar de ver em varios posts, que eles existem internados no pool de strings, eu acredito que eles existam no Heap e o que existem internado no pool, são suas referencias…