4

在学习如何在 java 中声明、初始化和访问数组元素时,我编写了以下简单代码:

class ArrayAccess{

    public static void main(String args[]){
        int[] a;
        a = new int[4];
        a[0] = 23;
        a[1] = a[0]*2;
        a[2] = a[0]++;
        a[3]++;
        int i = 0;
        while(i < a.length){
            System.out.println(a[i]);
            i++;

        }
    }
}

但我得到了意想不到的输出。

我得到的输出是:

24     

46

23

1

所以,

为什么24而不是23作为 的值a[0]?如果这是a[0]at的应有增量,a[2]那么为什么a[1]'s 元素是46而不是48

为什么23而不是24作为值a[2]

4

4 回答 4

9

a[2] = a[0]++;将值复制到 a[2] 后递增 a[0]

它与以下内容相同:

a[2] = a[0];
a[0]+=1;

如果要在分配使用之前增加值a[2] = ++(a[0]);

这与以下内容相同:

a[0]+=1;
a[2] = a[0];
于 2013-05-29T15:40:53.090 回答
4
a[2] = a[0]++; 

  int temp = a[0];
  a[2] = a[0];
  a[0] = temp + 1;
于 2013-05-29T15:41:20.340 回答
3

由于以下行:

a[2] = a[0]++;

增量 (++) 具有增加右侧值的副作用。否则你应该使用:

a[2] = a[0]+1;

另一个例子是 ++number 的类似概念。如果你写过:

a[2] = ++a[0];

a[0] 将递增,然后添加到 a[2]。因此,在 a[2] 中,您将拥有:24

于 2013-05-29T15:42:21.363 回答
1

需要对您的程序进行小修改

类数组访问{

public static void main(String args[]){
   int referenceNumber= 23;
    int[] a;
    a = new int[4];
    a[0] = referenceNumber;
    a[1] = a[0]*2;
    a[2] = referenceNumber++;
    a[3]++;
    int i = 0;
    while(i < a.length){
        System.out.println(a[i]);
        i++;

    }
}

}

现在让我们来提问

为什么 a[0] 的值是 24 而不是 23?如果这是在 a[2] 处增加 a[0],那么为什么 a[1] 的元素是 46 而不是 48。

是的,这是由于在 a[2] 处增加了 a[0]。但关键是你正在做的时刻 a[1] = a[0]*2; 它还没有增加。

为什么 a[2] 的值是 23 而不是 24?

你正在做 a[2] = a[0]++; 发生的事情是将 a[0] 的第一个值分配给 a[2],然后最终 a[0] 处的值增加而不是 a[2]

于 2013-05-29T15:46:03.007 回答