我不明白为什么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]
答案 0 :(得分:5)
int [] arr = I1.array;
不会复制数组,只会将引用分配给l1.array
到arr
。您可以使用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的值。