大家应该都知道C语言有两种参数传递方式,一种是形参,一种是实参。
形参会复制一份使用,随函数出栈销毁,传递的是值
实参会将引用也就是指针传递过去,被调用函数参数内的变化会影响到调用函数内参数的变化,传递的是引用。
在使用java的时候有时是感觉按照值传递的,有时候感觉是按照引用传递的,那么java到底是怎么传递参数的呢?
来写个简单的事例试验一下吧
先定义几个方法来进行测试
update(){}//用来对参数进行操作
首先是java基本数据类型
/*
* 4类8种基本数据类型,剩下的就是引用数据类型
*
* 基本
* -布尔
* -整型
* -浮点
* -字符
* 引用
*/
14 15 16 public void update(int value) { 17 value++; 18 } 19 20 public void update(byte value) { 21 value++; 22 } 23 24 public void update(short value) { 25 value++; 26 } 27 28 public void update(long value) { 29 value++; 30 } 31 32 public void update(double value) { 33 value++; 34 } 35 36 public void update(float value) { 37 value++; 38 } 39 40 public void update(char value) { 41 value='a'; 42 } 43 44 public void update(boolean value){ 45 value=!value; 46 }
然后是java的类数据类型
1 public void update(TypeA value) { 2 value.a=0; 3 } 4 5 public class TypeA { 6 int a; 7 8 public void setA(int a) { 9 this.a = a; 10 } 11 12 @Override 13 public String toString() { 14 return "TypeA [a=" + a + "]"; 15 } 16 17 }
先测试一下
1 public static void main(String[] args) { 2 int i = 0; 3 new Pointer().update(1); 4 System.out.println(i); 5 }
其他基本数据类型代码都差不多,只是定义的类型不同,就不粘贴了
输出结果:0
根据上面的结果可以胡诌出来一个结论:
java的基本数据类型是按照值传递(不对之处,请指正)
接下里看引用数据类型
1 public static void main(String[] args) { 2 TypeA a = new TypeA(); 3 a.a = 123; 4 new Pointer().update(a); 5 System.out.println(a); 6 }
输出结果:TypeA [a=0]
值得改变影响到了主函数,传递的是引用。
java引用数据类型的传递是引用,基本数据类型的传递是值。
如有不对之处,请多指教。