Nead chiarimento per il seguente codice:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Questo verrà stampato in B
modo che le prove sample
e gli referToSample
oggetti facciano riferimento allo stesso riferimento di memoria.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Questo verrà stampato AB
che dimostra anche lo stesso.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Ovviamente questo verrà generato NullPointerException
perché sto cercando di chiamare append
un riferimento nullo.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Quindi ecco la mia domanda, perché l'ultimo esempio di codice non viene lanciato NullPointerException
perché quello che vedo e capisco dai primi due esempi è se due oggetti si riferiscono allo stesso oggetto, quindi se cambiamo un valore si rifletterà anche su un altro perché entrambi stanno puntando a stesso riferimento alla memoria. Allora perché questa regola non si applica qui? Se assegno null
a referToSample, anche il campione dovrebbe essere null e dovrebbe generare un'eccezione NullPointerException ma non ne lancia una, perché?
sample
è ancorasample
. Sei solo cambiatoreferToSample
.