La réponse dépend de la langue que vous utilisez.
C / C ++
En C et C ++, le mot clé était NULL, et ce qui était vraiment NULL était 0. Il a été décidé que "0x0000" ne serait jamais un pointeur valide sur un objet. Il s'agit donc de la valeur qui est assignée pour indiquer qu'il n'est pas un pointeur valide. Cependant, c'est complètement arbitraire. Si vous tentiez d'y accéder comme un pointeur, il se comporterait exactement comme un pointeur vers un objet qui n'existe plus en mémoire, ce qui provoquerait la génération d'une exception de pointeur non valide. Le pointeur lui-même occupe de la mémoire, mais pas plus qu'un objet entier. Par conséquent, si vous avez 1000 pointeurs nuls, cela équivaut à 1000 entiers. Si certains de ces pointeurs pointent sur des objets valides, l'utilisation de la mémoire équivaudrait à 1 000 entiers plus la mémoire contenue dans ces pointeurs valides. Rappelez-vous qu'en C ou C ++,n'implique pas que la mémoire a été libérée, vous devez donc explicitement supprimer cet objet à l'aide de dealloc (C) ou delete (C ++).
Java
Contrairement à C et C ++, en Java, null n’est qu’un mot-clé. Plutôt que de gérer null comme un pointeur sur un objet, il est géré en interne et traité comme un littéral. Cela éliminait la nécessité de lier des pointeurs sous forme de types entiers et permettait à Java d’abstraire totalement les pointeurs Cependant, même si Java le cache mieux, ce sont toujours des pointeurs, ce qui signifie que 1000 pointeurs nuls consomment toujours l'équivalent de 1000 entiers. Évidemment, quand ils pointent sur des objets, un peu comme C et C ++, la mémoire est consommée par ces objets jusqu'à ce qu'aucun autre pointeur ne les référence, mais contrairement à C et C ++, le ramasse-miettes ramasse dessus lors de son prochain passage et libère de la mémoire, sans exiger que vous deviez suivre quels objets sont libérés et quels objets ne le sont pas, dans la plupart des cas (sauf si vous avez des raisons de faire référence à des objets avec une faible faiblesse, par exemple).