Java方法里参数的传递机制
java方法里参数的传递分为基本数据类型和一用数据类型,首先说明一下基本数据类型和引用数据类型在方法里面参数的
传递机制全部都是值传递机制。
值传递:将实参的数值(或者引用)赋值给形参,但是实参和形参完全是两个不相干的变量。
接下来我们分别讲述基本数据类型和引用数据类型:
基本数据类型的方法参数传递不会改变实参的值:
1 package com.heima.work.demo; 2 3 public class Methods { 4 public static void main(String[] args) { 5 int a = 3; 6 int b = 7; 7 jiaohuanzhi(a, b); 8 System.out.println("a是" + a + "............" + "b是" + b); 9 System.out.println("====================="); 10 ceshi cs = new ceshi(); 11 jiaohuanyinyong(cs); 12 System.out.println("实参a是" + cs.a + " " + "实参b是" + cs.b); 13 14 } 15 16 private static void jiaohuanyinyong(ceshi cs) { 17 int tamp; 18 tamp = cs.a; 19 cs.a = cs.b; 20 cs.b = tamp; 21 System.out.println("方法交换之后引用的a是" + cs.a + "b是" + cs.b); 22 cs = null;//这里将形参引用断开,但是不会影响实参 23 24 } 25 26 private static void jiaohuanzhi(int a, int b) { 27 28 int tamp; 29 tamp = a; 30 a = b; 31 b = tamp; 32 System.out.println("方法里交换之后的a的值是:" + a + "..........." + "b的值是:" + b); 33 34 35 } 36 } 37 38 class ceshi { 39 int a = 1; 40 int b = 6; 41 42 43 }
运行结果是:
可以看出对于基本数据类型来说,形参数值的改变并不会影响实参数值。参考下面的示意图:
但是我们看上面的代码,引用数据类型的数值在经过方法的交换之后,里面的值确实发生了给变呀,接下来我们就对引用数据
的值交换进行讲解:
引用数据类型值交换:
引用数据类型的参数传递也是值交换原理,只不过基本数类型是将数据值赋值给形参,但是引用数据类型是将引用地址赋值给形参:
基本数据类型根本就不涉及内存,形参和实参没有任何的联系,但是引用数据类型形参和实参指向的是同一块内存空间,两个指向同一对象的引用,通过
一个引用对对象操作另一个引用访问也会发生改变,因为内存中的数据已经改变,但是他们不是同一个引用,形参引用最后赋值为null,实参引用一样可以访问
内存就是很好的证明。
迎风少年