J'ai une confusion sur le comportement suivant, s'il vous plaît regardez le code ci-dessous :
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample.append("B");
System.out.println(sample);
Ceci imprimera B
donc cela prouve sample
et referToSample
font référence à 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);
Ceci 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 va jeter NullPointerException
parce que j'essaie d'appeler append
sur une référence nulle.
StringBuilder sample = new StringBuilder();
StringBuilder referToSample = sample;
referToSample = null;
sample.append("A");
System.out.println(sample);
Voici donc ma question, pourquoi le dernier exemple de code ne lance pas NullPointerException
parce que ce que je vois et comprends dans les deux premiers exemples, c'est que si deux objets se réfèrent au même objet, si nous changeons une valeur, cela se reflétera également dans l'autre car les deux objets pointent vers la même référence mémoire. Alors pourquoi cette règle ne s'applique-t-elle pas ici ? Si j'assigne null
pour referToSample, l'échantillon devrait également être nul et une NullPointerException devrait être levée, mais ce n'est pas le cas, pourquoi ?