java数组中的意外增量结果

时间:2013-05-29 15:38:59

标签: java arrays increment

在学习如何声明,初始化和访问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] a[2]的正常增量,那么为什么a[1]的元素为46而不是48

为什么23代替24作为a[2]的值?

4 个答案:

答案 0 :(得分:9)

将值复制到[2]

后,

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

与以下相同:

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

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

增加值

这与:

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

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

由于以下行:

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

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

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

另一个例子是++编号的类似概念。如果你写了:

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

a [0]会增加,然后添加到[2]。所以在[2]中你会得到:24

答案 3 :(得分:1)

需要进行小修改

class ArrayAccess {

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++;

    }
}

}

现在让我们回答问题

为什么24而不是23作为[0]的值?如果这是a [2]的[0]的正确增量,则为什么[1]的元素是46而不是48。

  

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

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

  你正在做[2] = a [0] ++;发生什么是a [0]的第一个值   分配给[2]然后最终在[0]处的值不递增   在[2]