Nead clarification pour le code suivant:
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Cela s'imprimera de Bsorte que les preuves sampleet les referToSampleobjets 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 ABqui 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 NullPointerExceptionparce que j'essaye d'appeler appendune 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 NullPointerExceptionparce 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 nullj'assigne à referToSample, sample doit également être null et il doit lancer une NullPointerException mais il n'en lance pas une, pourquoi?




sampleest toujourssample. Vous avez seulement changéreferToSample.