Java使用两种方式进行参数的传递:
1、值传递:即对参数的值进行复制,对复制后的副本进行传递。(这类传递针对基础型数据)
2、引用传递: 又称地址传递,即传递的是参数的地址,而非参数值的一个副本。(String对象、类对象、数组对象、接口对象使用的都是这种方式)
从两者的机制中可以发现:
使用值传递时,函数的内部操作并不会改变原来其参数的实际值,因为函数内部操作的只是其的一个副本,并未操作参数的实际值。
使用引用传递时,函数的内部操作会改变作为参数的对象的实际值,因为引用传递的是对象的实际地址,即使对象的实际值发生了变化。
!十分注意,Java中String类对象也使用的是引用传递方式,但是其由于实现机制不同,表现出了值传递类参数的性质。
Example:
1 public class TestString { 2 private String myStr="I love you!"; 3 private int myInt=5; 4 private int[] myIntArray={5,}; 5 public void changeValue(int sourceInt, String sourceString, int[] sourceArray) 6 { 7 sourceInt+=sourceInt; 8 sourceString="I hate you!"; 9 sourceArray[0]=100; 10 11 } 12 TestString() 13 { 14 15 print("The Value before calling changeValue method:"); 16 print("myInt="+Integer.toString(myInt)+"; "+"myStr="+myStr+"; "+"myIntArray="+Arrays.toString(myIntArray)); 17 changeValue(myInt, myStr, myIntArray); 18 print("The String after calling changeString method:"); 19 print("myInt="+Integer.toString(myInt)+"; "+"myStr="+myStr+"; "+"myIntArray="+Arrays.toString(myIntArray)); 20 21 } 22 }
从输出结果可以发现:
TestString()对传入其的基本类型:myInt, 字符串类型: myString, 数组类型: myIntArray 都进行了修改。
修改后再次打印的结果显示,对Int类型和String类型的修改并未成功,对myIntArray类型的参数修改成功。