所有的参数传递都是 传值,从来没有 传引用 这个事实。
所有的参数传递都会在 程序运行栈上 新分配一个 值 的复制品. 楼主的第一段代码。
这个传的 PassA 的 地址值。这个 地址值 被复制了一份。 不信,你写:
看看, 对passA有什么影响? 毫无作用。函数调用出来后,passA还是原来的值,不会变成Null. 但是,你的代码对 passA进行了操作 passA.a ,改变了passA的成员变量。 这个成员变量是一个真实指向String 的 地址,当然能够被改变。 这就是操作 (.) 和 赋值 (=) 的区别。 这是对 成员变量 a 的 赋值。真正改变了成员变量 a 的值。 注意,这里传递的参数是 passA, 而不是 a. 所以,passA 被复制了一份。passA 的这个副本的 a 变量还 指向 原来的 passA 的 a 变量。 楼主后面的代码,
只有对参数的 赋值,没有对参数的操作,当然不会产生影响。
引用
public static void test(StringBuffer str) { str.append("World"); } 对参数进行了操作,当然会产生影响。 |
Java 传参
最新推荐文章于 2024-11-12 21:14:07 发布