Эта строка
Car porsche = new Car();
делает несколько вещей. new Car()
- это то, что создает новый экземпляр автомобиля и возвращает ссылку на этот автомобиль. Car porsche
объявляет переменную типа, которая может содержать ссылку на некоторый автомобиль. А знак равенства =
инициализирует переменную (которая может содержать ссылку) ссылкой (полученной в результате выражения 'new').
Напротив,
Car audi;
объявляет переменная, которая может содержать ссылку на автомобиль. Переменная в настоящее время не инициализирована (если предположить, что это локальная переменная).
Car audi = null;
явно инициализирует ее, чтобы вообще не ссылаться на Car.
Что касается того, полезна ли она. Что ж, одна из основных функций переменной - это изменение значения. В случае переменной Car, возможно, мы хотим, чтобы она потенциально содержала разные ссылки на автомобили.
Car audi;
if (budget > 160000)
audi = new Car(AUDI_RS_CONVERTIBLE, NEW);
else {
haggle_over_used_car_price();
audi = new Car(AUDI_A3, USED);
}
В Java очень важно понимать различие между объектом и ссылкой на объект. Переменные содержат ссылки на объекты; переменная не является объектом.