В чем разница между этми записями?

130
23 марта 2019, 00:00

У меня есть класс Car, и я хочу создать его экземпляр. Можно написать:

Car car;
Car car = new Car();

В чем заключается разница между этми двумя записями?

Answer 1

В первом случаи вы просто объявляете ссылку на объект и не больше. У вашего Car, скорее всего есть поля, например, width, speed, и так далее. Данная запись их не затрагивает, их значение - не определено. С такой машинкой нельзя пока что ничего делать, кроме как инициализировать её.
Во втором случаи вы вызываете метод, в данном случае - это конструктор. Теперь с этой машиной можно полноправно работать. Конструктор будет пустым, его поля = null.
Если вы хотите увидеть кардинальное отличие, давайте представим такую ситуацию - у вас есть приложение в котором очень сильно ограничена память. Когда вы написали первую строчку, а затем запустили программу, много место не ушло. Во втором случаи, к примеру, о нашей машинке в конструкторе дается очень много информации, запускаются другие файлы, подкачиваются библиотеки...
В таком случаи в воображаемом приложении не хватит памяти, и оно вылетит.

Answer 2

Первый случай Car car; со вторым объединяет только то, что есть переменная типа Car. Для локальной переменной вам придется присвоить ей значение, иначе код просто не скомпилируется. Для переменной экземпляра, у нее будет ссылка по умолчанию на объект null Car car = null; Во втором же случае

Car car = new Car();

командой new мы создаем новый экземпляр (объект) класса Car и присваиваем переменной ссылку на него. Т.о. - у нас есть переменная - есть новый объект (в куче выделена память и заполнена данными объекта) - у переменной есть ссылка на объект, и можно не опасаться NullPointerException - у объекта есть как минимум одна действующая ссылка на него, а значит он доступен для работы, и в обозримом будущем сборщик мусора ему не страшенПолучается, что в недрах JVM создана целая, хоть и небольшая, но функциональная и рабочая структура.

READ ALSO
Как вытащить объект enum по значению?

Как вытащить объект enum по значению?

Есть код (ниже)Мне нужно вытащить MOSCOW по uid

146
Android Room - сохранение зависимостей

Android Room - сохранение зависимостей

Пытаюсь приспособить Room для работы с зависимостями "один-ко-многим"Про то, как использовать @Relation для чтения записей рассказывается в [1,2,3,4]

132
Не выводится текст из spring bean

Не выводится текст из spring bean

Пытаюсь освоить SpringДелаю все по видео Spring Потрошитель, но на экран ничего не выходит

157
Добавить кнопку перезагрузки

Добавить кнопку перезагрузки

как ??? В игре Добавить кнопку перезагрузки после проигрыша, чтобы кнопка появлялись в JPanel после проигрыша и при нажатии на неё приложение...

171