访问数组中的元素

时间:2012-11-10 16:22:12

标签: java arrays

这是Java代码的片段。

class Test{  
    public static void main(String[ ] args){
        int[] a = { 1, 2, 3, 4 };       
        int[] b = { 2, 3, 1, 0 };     
        System.out.println( a [ (a = b)[3] ] );  
    }
}

为什么打印1?这不是功课!我想了解Java。这与OCA Java 7考试有关。

2 个答案:

答案 0 :(得分:4)

在您引用a[ ... ]的那一刻,a仍然指向第一个数组。评估索引本身时,ba的分配。那么在那一刻,a变为b,其中第3个项目被提取,即0

0用作之前已找到的数组的索引。这是a指向的数组,尽管a本身在平均时间内发生了变化。因此,即使您可能期望1,也会打印2

我认为这是本示例试图显示的内容:数组引用已经过评估,并且在评估索引期间修改数组变量后不会更改。

但我不会在生产代码中使用这个'功能'。很不清楚。

答案 1 :(得分:3)

System.out.println( a [ (a = b)[3] ] );

首先,评估a的值({1, 2, 3, 4})。接下来,执行a = b;这会将b的值分配给a,并且返回 b的值。 b[3] = { 2, 3, 1, 0 }0,最终为{1,2,3,4}[b[3]] = {1,2,3,4}[0] = 1


要查看此内容,请考虑以下事项:

public static void main(String[] args) throws FileNotFoundException {
    int[] a = { 1, 2, 3, 4 };            
    System.out.println( a() [ (a = b())[c()] ] );
}

public static int[] a() {
    System.out.println('a');
    return new int[]{ 1, 2, 3, 4 };
}

public static int[] b() {
    System.out.println('b');
    return new int[]{ 2, 3, 1, 0 };
}

public static int c() {
    System.out.println('c');
    return 3;
}

输出:

a
b
c
1
相关问题