Esclarecimento Nead para o seguinte código:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Isso será impresso de B
forma que provas sample
e referToSample
objetos se refiram à mesma referência de memória.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Isso vai imprimir AB
que também prova o mesmo.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Obviamente, isso vai lançar NullPointerException
porque estou tentando chamar append
uma referência nula.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Então, aqui está minha pergunta, por que o último exemplo de código não está sendo lançado, NullPointerException
porque o que eu vejo e entendo nos dois primeiros exemplos é se dois objetos se referindo ao mesmo objeto, se alterarmos qualquer valor, ele também refletirá para outro porque ambos estão apontando para mesma referência de memória. Então, por que essa regra não se aplica aqui? Se eu atribuir null
a referToSample, sample também deve ser nulo e deve lançar um NullPointerException, mas não está jogando um, por quê?
sample
está paradosample
. Você apenas mudoureferToSample
.