简单理解Java址传递与值传递

mac2026-01-28  2

先看一段代码

public class testarr { public static void main(String[] args) { //首先对数组通过传参进行删除操作 int[] arr1 = new int[] {2,1,5,9,3,4}; boolean f = deleteEle(arr1,5); System.out.println("=========================="); System.out.println(f); System.out.println("=========================="); for(int i : arr1) { System.out.println(i); } System.out.println("=========================="); //再对一个整型数字进行传参操作进行对比 int a = 10; int b = change(a); System.out.println(b); System.out.println(a); a = change(a); System.out.println(a); } //删除数组中的某一个元素 public static boolean deleteEle(int[] arr , int target) { boolean flag = false; int index = 0; for(int i = 0 ; i < arr.length;i++) { if(target == arr[i]) { index = i; flag = true; } } for(int i = index ; i < arr.length - 1 ; i++) { arr[i] = arr[i+1]; } arr[arr.length- 1] = 0; return flag; } //再对一个型数字进行传参操作进行对比 public static int change(int b) { b = b + 3; return b; } }

运行结果如下

========================== true ========================== 2 1 9 3 4 0 ========================== 13 10 13

这段代码表明当一个数组传递给形参数组时,改变形参数组的元素时也会同时改变原来的数组元素。但是一个int变量传递给形参,形参改变却不会改变原来的int变量。 这个问题应该这样解释。数组名实际上就是数组的首地址,如果传递数组名,其实就是把数组的首地址传递给了形参数组的首地址,这样原数组和形参数组就共用相同的内存地址,然后利用它们的地址则可以直接对该地址下对应的数据进行改变。然而基本数据类型如int类型是值传递,把内容复制并传给形参,形参与实参占用两个不同的内存地址。所以改变形参的值改变后不会改变实参的值。

最新回复(0)