初始化int数组

时间:2016-03-31 02:56:00

标签: java arrays

我不明白为什么I1.array [0] = 555?我只想改变arr [0]

Intar I1 = new Intar(10);

int [] arr = I1.array;

        arr[0]=555;

public class Intar {

    int length;
    int [] array;


    public Intar(int lengt){

        length=lengt;
        array=new int[lengt];
        Random ran =new Random();

        for(int i=0; i<length; i++){

            array[i]= ran.nextInt(100);

**当我在arr [0] = 555 **之前和之后使用System.out.println时

I1.array [11, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
arr      [11, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
After arr[0]=555
I1.array [555, 57, 77, 74, 50, 62, 1, 11, 23, 27] 
arr      [555, 57, 77, 74, 50, 62, 1, 11, 23, 27]

2 个答案:

答案 0 :(得分:5)

int [] arr = I1.array;不会复制数组,只会将引用分配给l1.arrayarr。您可以使用Arrays.copyOf(int[], int)制作像

这样的副本
int[] arr = Arrays.copyOf(l1.array, l1.array.length);

答案 1 :(得分:0)

Intar I1 = new Intar(10);

使用构造函数public Intar(int lengt)创建一个Intar对象,然后将Intar对象的字段初始化为一个包含10个随机数的数组,长度为10。

写作时

int [] arr = I1.array;

你告诉arr引用存储在名为array的I1字段中的对象(10个随机生成的数字的数组)。因此,当你设置arr [0] = 555时,你也将I1.array的第0个元素设置为555。

你必须要了解的是I1.array持有对存储在Intar对象中的数组的引用。现在,arr引用的是与I1.array引用相同的对象。

例如:

public class Foo {

    int val;
    public Foo(int val){
        this.val = val;
    }
    int getVal(){
        return this.val;
    }

}

然后我们可以这样做:

public static void main(String[] args) {
    Foo a,b;

    a = new Foo(5);
    b = a;
    b.val = 5;
    System.out.println(a.getVal());
}

5将是输出,因为b现在引用a,我们更改了b的值,因此我们更改了a的值。