java数组参数传递

来源:百度知道 编辑:UC知道 时间:2024/07/02 22:05:30
我想问下为什么原来的数组值会改了,传值传递的话书上说不可能修改原来数组元素的啊。传过去的好象是一个副本啊。

public class t2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] a = { 1, 2, 3 };
method2(a);
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}

static void method2(int[] a) {
a[0] = 0;
a[1] =7;
a[2]=8;
}

}

public class t2 {
public static void main(String[] args) {

int a=1;
int b=2;
int c=3;
method2(a,b,c);
System.out.println(a);
System.out.println(b);
System.out.println(c);
}

static void method2(int a,int b,int c) {
a=7;
b=8;
c=9;
}

}
以上的程序,值是不会被修改的。
int型的数据是一个常量,存在于一个常量池中,当修改池中的值时,如果产生的新值,在原池中没有这个值,就会在池中创建一个新的。其实以上过程又创建了新的常量。
java中对于数组,是当作一个对象来看待的,你传递的是一个引用,也就是内存地址,在这个过程中,只存在一个对象,并没有创建新的对象,所有修改的只是这一个对象。
以上纯属我的个人理解。

传过去的不是副本 是一个地址 所以你修改他的内容 就是修改传进去的数组的内容,所以你原先的理解错了 值被修改是正常的 呵呵