对象类型在作为方法参数时,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消失,外面的不改变
你自己修改成这个数的
f(b);
调用这个函数了。 传递的参数b,可以认为是“复杂对象”,就是传地址。