2016-02-06 4 views
2

Допустим, у меня есть класс автомобиля, и я создаю ссылочную переменную для этого класса автомобилей.Новая ссылочная переменная Каждый раз, когда я создаю объект?

Car car = new Car() - Довольно прямолинейно.

отредактировать свойства этого автомобиля по телефону: car.setColor("Red"), and car.setPrice(2500).

Теперь, скажем, я хочу, чтобы создать новый автомобиль объект, я должен создать новую ссылочную переменную как это: Car car2= new Car(); или может я просто используйте исходную контрольную переменную для нового автомобиля?

+0

Что вам нужно? Что вы имели в виду, создав новую ссылочную переменную? Вы хотите получить данные из старого объекта? Вы хотите, чтобы они указывали на один и тот же фактический объект? – SOFe

ответ

0

Объект - это не что иное, как временный буфер, созданный в куче.
Всякий раз, когда вы создаете новый объект, в куче предоставляется новый буфер (или пробел).

0

Вы можете, конечно, повторно использовать свою первую переменную car, и это часто бывает в некоторых случаях (таких как петли). Имейте в виду, что ссылка исходной переменной будет заменена, поэтому, если вы не сохранили ссылку на объект где-то еще (например, в коллекции или поле на другом объекте), объект будет собираться мусором.

3

Короткий ответ: Это зависит от вас.

Длинный ответ: Вы можете использовать любой из этих методов. Если вы создадите новый автомобиль, предыдущий автомобиль, который вы создали, не пострадает, потому что разные объекты полностью независимы. Скажем

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
Car car2 = new Car(); 
car2.setColor("Blue"); 
car2.setPrice(3000); 

Теперь car1 и car2 имеют различные цвета и цены. Если вы измените значения car1, car2 не будет затронуто.

В качестве альтернативы, вы повторно car1:

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
car1 = new Car(); //You created the new car here 
car1.setColor("Blue"); 
car1.setPrice(3000); 

После этого кода, оригинальное содержание car1 теряется *. Это можно использовать, если вы думаете, что car1 больше не полезен, и его содержимое может быть отброшено.

* Примечание: объект car1 по-прежнему находится в памяти. Но это недоступно.

2

Развивая ответ Sweeper в:

Если мы вместо того, чтобы сделать это:

Car car1 = new Car(); 
car1.setColor("Red"); 
car1.setPrice(2500); 
Car car2 = car1; 
car2.setColor("Blue"); 
car2.setPrice(3000); 

Тогда оба car1 и car2 будет иметь цвет синий и цена 3000, потому что они указывали на тот же объект. Если мы затем переназначить car1:

car1 = new Car(); 
car1.setColor("Green"); 
car1.setPrice(0); 

car1 будет иметь цвет зеленый и цена 0, но car2 будет по-прежнему иметь цвет синий и цена 3000, потому что она по-прежнему ссылается на исходный объект, созданный для автомобиля1.

+0

Хорошее объяснение! – Sweeper

Смежные вопросы