假设我有一个Car Class,我为这个Car Class创建了一个引用变量。
Car car = new Car()
- 相当简单。
我通过调用car.setColor("Red"), and car.setPrice(2500).
现在,假设我要创建一个新的Car Object,我是否必须创建一个新的引用变量:Car car2= new Car();
或者我可以简单地将原始引用变量用于新车吗?
答案 0 :(得分: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
的对象仍在内存中。但它无法访问。
答案 1 :(得分: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,因为它仍然引用为car1创建的原始对象。
答案 2 :(得分:0)
对象只是在Heap中创建的临时缓冲区。
无论何时创建新对象,堆中都会提供新的缓冲区(或空格)。
答案 3 :(得分:0)
您当然可以重用第一个car
变量,这在某些情况下很常见(例如循环)。请记住,原始变量的引用将被替换,因此除非您在其他地方(例如在集合或另一个对象上的字段中)存储对该对象的引用,否则该对象将是垃圾集。