【问题标题】:New Reference Variable Each Time I create an Object?每次创建对象时都有新的参考变量?
【发布时间】:2016-02-06 06:29:08
【问题描述】:

假设我有一个汽车类,我为这个汽车类创建了一个引用变量。

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

我通过调用:car.setColor("Red"), and car.setPrice(2500).

来编辑那辆车的属性

现在,假设我想创建一个新的 Car 对象,我是否必须创建一个新的引用变量,如下所示:Car car2= new Car(); 或者我可以简单地为新车使用原始引用变量?

【问题讨论】:

  • 你想要什么?创建一个新的引用变量是什么意思?你想从旧对象中获取数据吗?你想让它们指向同一个实际对象吗?

标签: java oop object


【解决方案1】:

简答:由你决定。

长答案:您可以使用任何一种方法。如果你创建一辆新车,你之前创建的车不会受到影响,因为不同的对象是完全独立的。比方说

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】:

    扩展 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 创建的原始对象。

    【讨论】:

      【解决方案3】:

      对象只不过是在堆中创建的临时缓冲区。
      每当您创建一个新对象时,堆中都会提供一个新的缓冲区(或空间)。

      【讨论】:

        【解决方案4】:

        您当然可以重用您的第一个car 变量,这在某些情况下很常见(例如循环)。请记住,原始变量的引用将被替换,因此除非您已将对该对象的引用存储在其他地方(例如在集合中或另一个对象的字段中),否则该对象将被垃圾回收。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-12
          • 1970-01-01
          • 2021-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多