gpt4 book ai didi

java - 面向对象/JAVA : Does assinging an object to another changes its attributes(class variables) too?

转载 作者:行者123 更新时间:2023-12-02 02:43:02 24 4
gpt4 key购买 nike

所以我的问题是对象 A 是否有一个属性,例如 int var; 并且对象 B 是否有一个属性 int var2 这两个对象都是使用相同的构造函数从同一个类实例化的。为了便于说明,我们假设 var=3var2=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());
}

}

公告

在尝试向我解释我已经知道的内容之前,请检查代码,非常感谢您的理解。

最佳答案

您的代码无法按预期工作的问题在于这段简短的代码:

cz=c;

CarSize是引用类型,变量为CarSize将“指针”存储到 CarSize对象,而不是 CarSize对象本身。

当您传递汽车尺寸作为参数时,您正在传递一个“指针”。 cz=c使指针存储在cz中指向与 c 中存储的相同对象.

现在让我们看看如何调用此方法:

doubleVar(this);

thiscz这是在 main 方法中声明的。再次,this指向汽车大小的对象。在 doubleVar方法中,您使参数指向另一个对象,但您仅使参数指向其他对象。 this永远不会改变,它的字段也不会改变。

这就是为什么您看不到值(value)翻倍的原因。

要解决此问题,请不要为参数分配新值。相反,更改 this直接地。删除该参数,因为不需要。

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

}

关于java - 面向对象/JAVA : Does assinging an object to another changes its attributes(class variables) too?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45109824/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com