先看一段代码
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类型是值传递,把内容复制并传给形参,形参与实参占用两个不同的内存地址。所以改变形参的值改变后不会改变实参的值。