java 中对象赋值问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 00:14:21
class ValHold{
public int i= 10;
}

public class Ob{
public static void main(String[ ] args){
Ob o = new Ob();
o.amethod();
}

public void amethod (){
int i = 99;
ValHold v = new ValHold ();
v.i= 30;
another (v,i);
System.out.println(v.i);
}
public void another(ValHold va, int i) {
i = 0;
va.i = 20;
ValHold vh = new ValHold ();
va = vh;
System.out.print(va.i+" "+i+" ");
}
}
输出为10 0 20
我对20 有些疑惑,请高手指教,多谢!

关键的地方在这几行:
va.i = 20;
ValHold vh = new ValHold ();
va = vh;

这几行运行以后,要记住一点,
上面的v.i的值是这样一个过程:->10->30->20到此结束。

下面
ValHold vh = new ValHold ();
va = vh;
的意思是va重新指向另外一个新的对象,而原来的v指向的对象还是不变。

所以结果就是这样,区别于C++

这个其实原理很简单,关键要搞清楚里面的内存分配情况。
有机会可以给你画画内存的分配,呵呵...

应该学过C,C++吧,你大可以把 Java 中对象传递当作 把一个指向该对象的 指针 当作参数传递进入函数,
这样,函数内的赋值就影响到了 amethod 中 对象 v 的值。

刚重测了一下.确实是这样.下面是给出的答案.绝对正确.我现在也搞懂这个问题了...

因为在java中一个对象做为参数传递给另一个方法使用.传的是对象的引用,而传送的不是另一个新的对象.所以他的修改要影响前面的对象