标签:
先上代码:
public class JavaTest { private int paraInt = 10; public int getParaInt() { return paraInt; } public void setParaInt(int paraInt) { this.paraInt = paraInt; } public void tryChangeBasicData(int para){ para = 100; System.out.println("inner tryChangeBasicData method:para = " + para); } public void tryChangeObject(JavaTest jTest){ jTest.setParaInt(100); System.out.println("inner tryChangeObject method:para = " + jTest.getParaInt()); } public static void main(String[] args) { JavaTest jTest = new JavaTest(); System.out.println("基本数据类型作为参数传递"); System.out.println("before method: " + jTest.getParaInt()); jTest.tryChangeBasicData(jTest.getParaInt()); System.out.println("after method: " + jTest.getParaInt()); System.out.println(""); System.out.println("对象引用作为参数传递"); System.out.println("before method: " + jTest.getParaInt()); jTest.tryChangeObject(jTest); System.out.println("after method: " + jTest.getParaInt()); } }
输出:
基本数据类型作为参数传递 before method: 10 inner tryChangeBasicData method:para = 100 after method: 10 *** 对象引用作为参数传递 before method: 10 inner tryChangeObject method:para = 100 after method: 100
是按值传递,实际上是对传入的基本数据类型参数A 做了一个值拷贝B,然后所有操作是针对这个拷贝B 的,因此不会影响到原参数A。
比如上面代码中,tryChangeBasicData() 方法前后 paraInt 值并没有改变。
是引用传递,实际上是对传入引用X 做了一个拷贝引用Y,传入引用X 和拷贝引用Y 指向同一个地址。
上面代码中,tryChangeObject() 方法对拷贝引用Y 指向的地址空间内的变量进行修改,所以传入引用X 取得的变量值是修改后的值。
在《Java 核心技术》中提到的 “Java里面参数传递都是按值传递” 意思是:按值传递传递的是值得拷贝,按引用传递实际传递的是引用的地址值,统称为按值传递。
标签:
原文地址:http://www.cnblogs.com/xmsx/p/5691210.html