Nead clarification pour le code suivant:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Cela s'imprimera de B
sorte que les preuves sample
et les referToSample
objets se réfèrent à la même référence mémoire.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
sample.append("A");
referToSample.append("B");
System.out.println(referToSample);
Cela imprimera AB
qui prouve également la même chose.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
referToSample.append("A");
System.out.println(sample);
Évidemment, cela jettera NullPointerException
parce que j'essaye d'appeler append
une référence nulle.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Donc, voici ma question, pourquoi le dernier exemple de code ne lance-t-il pas NullPointerException
parce que ce que je vois et comprends à partir des deux premiers exemples, c'est si deux objets faisant référence au même objet, si nous modifions une valeur, il reflétera également l'autre car les deux pointent vers même référence mémoire. Alors pourquoi cette règle ne s'applique-t-elle pas ici? Si null
j'assigne à referToSample, sample doit également être null et il doit lancer une NullPointerException mais il n'en lance pas une, pourquoi?
sample
est toujourssample
. Vous avez seulement changéreferToSample
.