Відповідь залежить від мови, якою ви користуєтесь.
C / C ++
У C і C ++ ключове слово було NULL, а насправді NULL було 0. Було вирішено, що "0x0000" ніколи не буде дійсним покажчиком на об'єкт, і таким чином, це значення, яке присвоюється, вказує на те, що це не є дійсним покажчиком. Однак це абсолютно довільно. Якщо ви спробували отримати доступ до нього як вказівник, він поводитиметься точно так само, як вказівник на об’єкт, якого більше немає в пам'яті, викликаючи викидання недійсного винятку вказівника. Сам вказівник займає пам'ять, але не більше, ніж цілий об'єкт. Отже, якщо у вас є 1000 нульових покажчиків, це еквівалент 1000 цілих чисел. Якщо деякі з цих покажчиків вказують на дійсні об’єкти, то використання пам'яті було б еквівалентно 1000 цілих чисел плюс пам'ять, що міститься в цих дійсних покажчиках. Пам'ятайте, що в C або C ++,не означає, що пам'ять була звільнена, тому ви повинні явно видалити цей об'єкт за допомогою dealloc (C) або delete (C ++).
Java
На відміну від C і C ++, у Java null є лише ключовим словом. Замість того, щоб керувати null, як вказівник на об'єкт, він управляється внутрішньо і обробляється як буквальний. Це усунуло необхідність прив'язувати покажчики як цілі типи і дозволяє Java повністю абстрагувати вказівники. Однак навіть якщо Java приховує це краще, вони все ще є покажчиками, тобто 1000 нульових покажчиків все ще споживає еквівалент 1000 цілих чисел. Очевидно, що коли вони вказують на об'єкти, подібно до C і C ++, ці об’єкти споживають пам'ять, поки більше покажчики не посилаються на них, однак на відміну від C і C ++, збирач сміття підбирає його на наступному проході і звільняє пам'ять, не вимагаючи, щоб вам слід було відслідковувати, які об’єкти звільняються, а які - ні, в більшості випадків (якщо, наприклад, у вас немає причин слабо посилатися на об'єкти).