java中数组初始赋值和不赋值有什么区别

static int[] rotLeft(int[] a, int d) {
int alen=a.length;
int []chushi=new int[alen];
//chushi=a;有没有这一行为什么结果会差很多
int index=0;
for(int i=0;i<alen;i++)
{
index=(i+(alen-d))%alen;/////////????????????
chushi[index]=a[i];
}
return chushi;
}

这是Java中常见的“对象引用”问题。

首先,chushi只是一个对象引用,指向的是堆空间里面的对象值;

chushi=a;
这句代码,表示chushi放弃了指向原来的对象值,转而指向了a所指向的对象,也就是说chushi和a现在指向了同一个对象。

那么现在就很好理解了:

你代码for循环中这句代码chushi[index]=a[i];就相当于给对象重新赋值了!

你可以这样检测,不要指向同一个对象,而是指向单独的对象,虽然值是一模一样,但是却互不影响了:

public static int[] rotLeft(int[] a, int d) {
int alen=a.length;
int[] chushi=new int[alen];
for(int j=0; j<alen; j++){
chushi[j] = a[j];
}
int index=0;
for(int i=0;i<alen;i++)
{
index=(i+(alen-d))%alen;
chushi[index]=a[i];
}
return chushi;
}

温馨提示:答案为网友推荐,仅供参考
相似回答