Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Avatar

imutabilidade de Strings

Recommended Posts

Fala pessoal, sou eu mais uma vez.

Eu estou estudando o Java por conta. Atualmente eu estou no capítulo 6 do SCJP (Caty Sierra...) e me deparei com a descrição de como funcionam as Strings em Java. Excelente, compreendi que para cada String é criado, no heap, um objeto e ele é ou não referênciado por uma variável de instância ou afim.

Sei também que este objeto pode permanecer em um pool de strings...

Isto tudo acontece "por debaixo dos panos", isto é, à nível de compilador.

Então eu resolvi fazer um teste:

 

public class Duvida {
  public static void main(String []args) {
	String a = "abcdef";
	String b = a;
	System.out.println(b == a);
	b = "abcdef"; //linha comentada
	System.out.println(b == a);
	System.out.println(b.equals(a));
  }
}
A saída deste código foi:

true

true

true

Na linha comentada (b = "abcdef";) - se eu substituir o comando por String b = "abcdef"; - a saída será:

true

false

true

 

Eu fiquei na dúvida, eu imaginei que seria igual para ambos, que teria sido criado um novo objeto quando eu fiz b = "abcdef"; - no entanto isto não aconteceu exatamente. Foi porque eles estão sendo referenciados para o mesmo lugar no pool? Ou estou fazendo a maior confusão?

 

Desde já, grato pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tentei simular o que voce disse e não consegui.

Coloque os dois códigos completos por favor.

 

Quando voce faz isso:

String a = "abcdef";

Na verdade "abcdef" é criada no pool de strings e nenhum objeto no heap é criado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem-me distrair vocês. Não sei porque, mas agora que eu refiz os testes o resultado foi o previsto no início, tudo true.

Sendo assim, o tópico pode ser removido, eu devo ter feito alguma coisa idiota no primeiro teste :)

Valeu pela força Mnemonic e Kandrade!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.