对于基本类型时传值调用大家很容易理解。我这样说肯定有人会反对。既然你说java永远时传值调用,为什么当参数是对象时,这个对象的值会被改变呢?这难道不是传址吗? 非也?下面我来给解释一下:当传递的参数是一个对象时。 举个例子: public class Test { public static void main(String[] args) { Test test = new Test(); Xxx a = new Xxx(); System.out.println("Before the mothed: a = " + a); test.change(a); System.out.println("After the mothed: a = " + a); } public void change(Xxx x) { x = ...; System.out.println("In the mothed: x = " + x); } }当调用exchange方法时,a,b的值的拷贝被传给了exchange方法。 注意: 这里的拷贝时对a和b这两个对象变量的值的拷贝,而不是对象的拷贝!! 所以,这时候a和x两个对象变量同时指向了同一个对象。 当x所指向的对象变量被修改时,a所指向的对象变量也被修改了! 因为他们都指向同一个对象。这就是为什么java的传值调用也能修改对象的原因!
to : dongjb 对象类型(除非可变对象)是传址.能就"除非可变对象"做个说明吗? 可变对象是传值吗?
非也?下面我来给解释一下:当传递的参数是一个对象时。
举个例子:
public class Test {
public static void main(String[] args) {
Test test = new Test();
Xxx a = new Xxx();
System.out.println("Before the mothed: a = " + a);
test.change(a);
System.out.println("After the mothed: a = " + a);
} public void change(Xxx x) {
x = ...;
System.out.println("In the mothed: x = " + x);
}
}当调用exchange方法时,a,b的值的拷贝被传给了exchange方法。
注意:
这里的拷贝时对a和b这两个对象变量的值的拷贝,而不是对象的拷贝!!
所以,这时候a和x两个对象变量同时指向了同一个对象。
当x所指向的对象变量被修改时,a所指向的对象变量也被修改了!
因为他们都指向同一个对象。这就是为什么java的传值调用也能修改对象的原因!
对象类型(除非可变对象)是传址.能就"除非可变对象"做个说明吗?
可变对象是传值吗?