在学习如何声明,初始化和访问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]
的值?
答案 0 :(得分:9)
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]