日期:2014-05-20  浏览次数:20730 次

SCJP考题:数组 遍历 var-arg
Given:
Java code
1. public class Venus {
2. public static void main(String[] args) {
3. int [] x = {1,2,3};
4. int y[] = {4,5,6};
5. new Venus().go(x,y);
6. }
7. void go(int[]... z) {
8. for(int[] a : z)
9. System.out.print(a[0]);
10. }
11. } 

What is the result?
A. 1
B. 12
C. 14
D. 123
E. Compilation fails.
F. An exception is thrown at runtime.

这道题好迷惑。
如果最后输出换成:
for(int[] a : z)
System.out.print(a[2]);
会输出类似于:
[I@6197cc[I@734d246.
如果输出a[1]/a[2],结果会是25 / 36
这是怎么回事啊。这里是什么语法在起作用啊?
thx

------解决方案--------------------
答案C 
其实这道题考的就是JAVA里面的所谓“可变参数”
go方法 接受可变参数,就是可以接受多个数组,z是数组的数组,
z[0]是第一个传入数组 z[1]是第二个(如果传入了多于一个)
然后for(int[] a:z)打印每个数组的第一个元素
------解决方案--------------------
我测试了一下
a[1]=14
a[2]=25
a[3]=36
表示不能理解
------解决方案--------------------

问题搞明白了 就结贴给分哈


探讨

引用:

答案C
其实这道题考的就是JAVA里面的所谓“可变参数”
go方法 接受可变参数,就是可以接受多个数组,z是数组的数组,
z[0]是第一个传入数组 z[1]是第二个(如果传入了多于一个)
然后for(int[] a:z)打印每个数组的第一个元素

有道理,数组的数组,就是这个道理了。

------解决方案--------------------
把int[]类型换成X类型,且假设X有f0,f1,f2三个字段:

1. public class Venus {
2. public static void main(String[] args) {
3. X x = new X(1,2,3);
4. X y = new X(4,5,6);
5. new Venus().go(x,y);
6. }
7. void go(X... z) {
8. for(X a : z)
9. System.out.print(a.f0);
10. }
11. } 

这个不可能看不懂吧