为什么运行结果是20,40呢? 涉及到值传递和地址传递不是很明白,希望大侠能解释一下,不胜感激!

2024-12-13 00:40:58
推荐回答(2个)
回答1:

对象类型在作为方法参数时,COPY的是引用。
首先b.width=10;b.length=20的。
当f(b);时,内存会COPY出一个引用(把引用理解成一个箭头),就是static void f(Book p)里的p,可以把这个p理解成一个箭头,指向了b.所以p的改变就是b的改变。
然后这个p
p.width=20;p.length=40;此时,那么b也变了。所以打印出的是20和40 .

下面说下如果传的是基本类型
那么传的是值的copy ,static void f(int p),会在内存中copy出一个完全不相关的但值相等的变量来,名字叫p,而不是箭头,p改变不影响外面的改变,方法结束,p消失,外面的不改变

回答2:

你自己修改成这个数的
f(b);
调用这个函数了。 传递的参数b,可以认为是“复杂对象”,就是传地址。