2016-02-06 102 views
2

可以说我有一个汽车类,我为这个汽车类创建了一个参考变量。每次我创建一个对象时,新的引用变量?

Car car = new Car() - 相当直截了当。

我通过调用编辑轿车的特性:car.setColor("Red"), and car.setPrice(2500).

现在,让我们说,我想创建一个新的Car对象,我必须创建这样一个新的参考变量: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); 

现在car1car2有不同的颜色和价格。如果更改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

扩展在扫地的回答是:

如果我们不是这样做:

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

然后,两个CAR1和CAR2将有蓝色的颜色和3000的价格,因为他们指指同一个对象。如果我们再重新分配CAR 1:

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

CAR 1将有绿色的颜色和0的代价,但CAR2还是会有蓝色的颜色和3000的价格,因为它仍然引用创建原始对象为car1。

+0

很好的解释! – Sweeper

相关问题