Java值传递与引用传递分析

mac2026-03-26  4

值传递与引用传递

Java方法中的有参数据传递有两种;一种是值传递;另一种是引用传递(其实就是地址传递);我们先看一段代码(虽然长,但是很简单易懂);

public class Test { static void changeAge(int x) { x = 0; } static void changeName(String x) { x=""; } static void changeGrades(int [] x) { //地址传递后,这个 x 其实就是 grades ;也就是说这个方法是对原数据进行的操作 System.out.println(x); //将 x 的地址输入,会发现和 grades 是同一个地址 x[0]=71; //初中,72分及格,皮一下 x[1]=71; x[2]=71; } public static void main(String[] args) { int age = 12; String name = "Tom"; int [] grades = new int[] {100,120,110}; System.out.println(age); changeAge(age); //这里是值传递;等于语句 changeAge(12); System.out.println(age); System.out.println(); System.out.println(name); changeName(name); //这里也是值传递;等于语句 changeName("Tom"); System.out.println(name); System.out.println(); for(int data:grades) { System.out.println(data); } System.out.println(grades); //这里是输出grades,可以看出来输出的是地址,而不是数组 changeGrades(grades); //这里是引用传递,也就是地址传递,因为此时的grades是地址,不是数组 for(int data:grades) { System.out.println(data); } } } 12 12 Tom Tom 100 120 110 [I@52e922 [I@52e922 71 71 71

定义三个方法,分别是 changeAge()、changeName() 和 changeGrades();然后将定义好的 age、name 和 grades 使用方法执行一遍,可以发现,除了 grades数组 ;其他的都没有改变,这就涉及到值传递和引用传递(地址传递)的区别了;

区别

值传递相当于系统在原有数据的基础上又复制了原有数据的一个值,并将这个值传到方法中,而原有数据保持不变;结合上例就是 age 和 name 都没有改变,只是将 age 的数值和 name 的值(这里是字符串)传了过去,因此原有数据没有改变;引用传递则是将地址传到方法中,从而从根本上改变了数据;结合上例就是在调用 changeGrades() 方法时,是将 grades 的地址传了过去,而不是值,因此,此方法运行时是对原数据进行的改变,而不是对复制的原数据进行的改变。

 

最新回复(0)