为什么选A而不是C?? 看下面的代码,写出输结果 public class Ex2 { public st
答案:3 悬赏:10 手机版
解决时间 2021-03-26 05:00
- 提问者网友:十年饮冰
- 2021-03-25 06:04
为什么选A而不是C?? 看下面的代码,写出输结果 public class Ex2 { public st
最佳答案
- 五星知识达人网友:千杯敬自由
- 2021-03-25 06:31
1、System.arraycopy(a, 0, newArray, a.length); 参数是5个不是4个。
2、这时一个迷惑题,其实就
publ ic static void changeArray(int[] a){
a[0] = 10;
}这个方法有用。结合下图,你可以看出,expand(a)方法其实对你main里的a是没有作用的,原因是:int数组是对象,存储的是相同的int基本类型。在方法传递时,传的是main里a数据的引用。此时你用了一句,a = newArray; 把a的引用堆指向了newArray。这是一个新a。 也就是main里的a与expand里的a其实引用已经不是同一个。你再这么改变expand里的a也不会对main里的a产生影响。
而对于changeArray方法来说,这是直接改变a里的引用值。
回答完毕。你的5分太少。
追问可能我学的太浅了,,还是有点不理解,,不过还是要谢谢你,,
2、这时一个迷惑题,其实就
publ ic static void changeArray(int[] a){
a[0] = 10;
}这个方法有用。结合下图,你可以看出,expand(a)方法其实对你main里的a是没有作用的,原因是:int数组是对象,存储的是相同的int基本类型。在方法传递时,传的是main里a数据的引用。此时你用了一句,a = newArray; 把a的引用堆指向了newArray。这是一个新a。 也就是main里的a与expand里的a其实引用已经不是同一个。你再这么改变expand里的a也不会对main里的a产生影响。
而对于changeArray方法来说,这是直接改变a里的引用值。
回答完毕。你的5分太少。
追问可能我学的太浅了,,还是有点不理解,,不过还是要谢谢你,,
全部回答
- 1楼网友:街头电车
- 2021-03-25 08:14
因为数组没有赋值的那几个空间是null,不是0
- 2楼网友:長槍戰八方
- 2021-03-25 07:08
a = newArray;a赋值成newArray了,指向其他的对象了,在这个方法里修改的a已经不是在主方法里定义的a了,只是a的一个副本了,原来的a数组对象没有变,引起其他方法传入的a数组仍然是{1,2,3,4,5}
如果在expand这个方法中执行a[1]=5;a[2]=6;这样才是修改了a对象的值,才会影响其他的方法引用的a的值
你可以在3个方法中输出a的地址看看就知道了
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray,0, a.length);
a = newArray;
System.out.println(a);//输出a地址
}
public static void changeArray(int[] a){
a[0] = 10;
System.out.println(a);//输出a地址
}
public static void printArray(int[] a){
System.out.println(a);//输出a地址
for(int i = 0; iSystem.out.print(a[i] + " \t");
}
结果
[I@c17164//expand方法输出a的地址
[I@1fb8ee3//changeArray
[I@1fb8ee3//printArray
如果在expand这个方法中执行a[1]=5;a[2]=6;这样才是修改了a对象的值,才会影响其他的方法引用的a的值
你可以在3个方法中输出a的地址看看就知道了
public static void expand(int[] a){
int[] newArray = new int[a.length * 2];
System.arraycopy(a, 0, newArray,0, a.length);
a = newArray;
System.out.println(a);//输出a地址
}
public static void changeArray(int[] a){
a[0] = 10;
System.out.println(a);//输出a地址
}
public static void printArray(int[] a){
System.out.println(a);//输出a地址
for(int i = 0; iSystem.out.print(a[i] + " \t");
}
结果
[I@c17164//expand方法输出a的地址
[I@1fb8ee3//changeArray
[I@1fb8ee3//printArray
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯