【问题标题】:unexpected increment result in java arrayjava数组中的意外增量结果
【发布时间】:2013-05-24 23:19:09
【问题描述】:
在学习如何在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]的值?
【问题讨论】:
标签:
java
arrays
increment
【解决方案1】:
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];
【解决方案2】:
a[2] = a[0]++;
是
int temp = a[0];
a[2] = a[0];
a[0] = temp + 1;
【解决方案3】:
因为下面一行:
a[2] = a[0]++;
递增 (++) 具有递增右侧值的副作用。否则你应该使用:
a[2] = a[0]+1;
另一个例子是 ++number 的类似概念。如果你写了:
a[2] = ++a[0];
a[0] 将增加,然后添加到 a[2]。因此,在 a[2] 中,您将拥有:24
【解决方案4】:
需要对你的程序进行小修改
类数组访问{
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] 处的值增加而不是
在 [2]