oop/java:将一个对象分配给另一个对象是否也会改变它的属性(类变量)?

nhaq1z21  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(394)

所以我的问题是如果一个物体 A 具有如下属性 int var; 和对象 B 有一个属性 int var2 这两个对象都是使用同一个构造函数从同一个类示例化的。为了便于说明,让我们这样说 var=3 以及 var2=0 不指定对象 A=B 制造 A.var==0 ? 请给我你的答案。
以下是更多代码,以备您需要:

public class CarSize{
    public CarSize(int x)
    {
        this.var=x;
    }
    public void call()
    {

        doubleVar(this);

    }
    private void doubleVar(CarSize cz)
    {
        int vara= cz.getVar()*2;
        CarSize c= new CarSize(vara);
        cz=c;

    }
    public int getVar(){return this.var;}
    private int var;
    public static void main(String args[])
    {
        CarSize cz = new CarSize(3);
        cz.call();
        System.out.println(cz.getVar());
    }

}

公告
请大家在尝试向我解释我已经知道的东西之前先检查一下代码,非常感谢您的理解。

qzlgjiam

qzlgjiam1#

public class Test{

    public static void main(String[] args){

    object a = new object(3);
    object b = new object(0);

    a = b;
    System.out.println(a.var);
  }
}

public class object{

  protected int var;
  public object(int x){
     var = x;
  }
}

这是你描述的情况的代码。这里的输出是“0”,因为当一个程序员定义的对象被设置为同一类型的另一个对象时,它会覆盖从原始值3到新值0的引用

hyrbngr7

hyrbngr72#

可以将对象的引用指定给另一个对象,但不能将对象指定给另一个对象。在您的例子中,a和b都将引用以前仅由b引用的同一对象。以前由引用的对象将由垃圾收集器获取并不再存在。

wsxa1bj1

wsxa1bj13#

为什么您的代码不能像预期的那样工作,问题就在于下面这段代码:

cz=c;

CarSize 是引用类型,变量为 CarSize 存储指向的“指针” CarSize 对象,而不是 CarSize 对象本身。
当您传递汽车尺寸作为参数时,您传递的是一个“指针”。 cz=c 使指针存储在 cz 指向与中存储的对象相同的对象 c .
现在让我们看看如何调用此方法:

doubleVar(this);
``` `this` 指 `cz` 在main方法中声明的。再一次, `this` 指向汽车大小的对象。在 `doubleVar` 方法,使参数指向另一个对象,但仅使参数指向其他对象。 `this` 它永远不会改变,它的领域也不会改变。
这就是为什么你看不到价值翻倍。
要解决此问题,请不要为参数指定新值。相反,改变 `this` 直接。去掉参数,因为不需要。

private void doubleVar()
{
this.var *= 2; // you can actually omit "this.", I put it there just to make it clear for you

}

zsbz8rwp

zsbz8rwp4#

在java中,使用 = 带有非基本体的运算符会导致锯齿。如果你有两个同一类的不同对象, a 以及 b ,说 a = b; 制造 a 与相同的对象 b ,垃圾收集最终会破坏过去的环境 a .
所以,是的,这个领域是一样的,但是在改变 a 的字段值也将更改 b 字段的值,因为 a 以及 b 现在都一样了。

相关问题