为什么最后的输出结果还是1234,?
public class Math {
public static void main(String[] args) {
int[] arr ={1,2,3,4};
tet.test(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
class tet{
static void test(int[] arr ){
arr=new int[]{7,8,9,10};
}
}
参考GPT和自己的思路:因为在调用 test
方法时,引用变量 arr
的值被赋值为一个新的数组 {7, 8, 9, 10}
,但这个值只在 test
方法中有效,不会改变 main
方法中的原数组。因此,当 main
方法中的循环输出数组时,仍然输出原始的数组 {1, 2, 3, 4}
。
函数里改变不了传入外部变了arr的地址的。你改的只是函数内的arr地址
你如果希望修改数组中的内容,不能修改数组变量本身,可以采用如下的方式:
public static void main(String[] args) {
int[] arr ={1,2,3,4};
tet.test(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
static class tet{
public static void test(int[] arr ){
// arr=new int[]{7,8,9,10};
arr[0] = 7;
arr[1] = 8;
arr[2] = 9;
arr[3] = 10;
}
}
要改变指针,需要一个对象包裹:
public class Math {
public static void main(String[] args) {
A a = new A(); a.arr ={1,2,3,4};
tet.test(a);
for (int i = 0; i < a.arr.length; i++) {
System.out.println(a.arr[i]);
}
}
}
class A { public int[] arr; }
class tet{
static void test(A a){
a.arr=new int[]{7,8,9,10};
}
}