所以我的问题是如果一个物体 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());
}
}
公告
请大家在尝试向我解释我已经知道的东西之前先检查一下代码,非常感谢您的理解。
4条答案
按热度按时间qzlgjiam1#
这是你描述的情况的代码。这里的输出是“0”,因为当一个程序员定义的对象被设置为同一类型的另一个对象时,它会覆盖从原始值3到新值0的引用
hyrbngr72#
可以将对象的引用指定给另一个对象,但不能将对象指定给另一个对象。在您的例子中,a和b都将引用以前仅由b引用的同一对象。以前由引用的对象将由垃圾收集器获取并不再存在。
wsxa1bj13#
为什么您的代码不能像预期的那样工作,问题就在于下面这段代码:
自
CarSize
是引用类型,变量为CarSize
存储指向的“指针”CarSize
对象,而不是CarSize
对象本身。当您传递汽车尺寸作为参数时,您传递的是一个“指针”。
cz=c
使指针存储在cz
指向与中存储的对象相同的对象c
.现在让我们看看如何调用此方法:
private void doubleVar()
{
this.var *= 2; // you can actually omit "this.", I put it there just to make it clear for you
}
zsbz8rwp4#
在java中,使用
=
带有非基本体的运算符会导致锯齿。如果你有两个同一类的不同对象,a
以及b
,说a = b;
制造a
与相同的对象b
,垃圾收集最终会破坏过去的环境a
.所以,是的,这个领域是一样的,但是在改变
a
的字段值也将更改b
字段的值,因为a
以及b
现在都一样了。