有人可以解释以下两个程序之间的区别吗?它们看起来与我相当,但它们会产生不同的输出。是什么原因?
程序1:输出不正确的值; i=1
public class Test1{
public static void main(String[] args) {
int[] values = new int[] { 2, 3, 5, 1 };
int i = 0;
for (Integer integer : values) {
i =+ integer.intValue();
} // for loop ends
System.out.println("i=" + i);
}
}
计划2:输出预期值; i=11"
public class Test2{
public static void main(String[] args) {
int[] values = new int[] { 2, 3, 5, 1 };
int i = 0;
for (Integer integer : values) {
i = i + integer.intValue();
} // for loop ends
System.out.println("i=" + i);
}
}
答案 0 :(得分:17)
显然,主要区别在于这一行:
i =+ integer.intValue();
也许它打算在第一个程序中使用i +=
而不是i =+
。
在你的版本中,第一个程序只是在每次迭代时分配一个值,所以它的最终结果是数组中的最后一个值(1
)。你的第二个程序做了它应该做的事情 - 它添加了数组中的所有元素,结果是11
。
答案 1 :(得分:10)
您尝试添加和分配,但使用了错误的运算符。
for (Integer integer : values) {
i =+ integer.intValue();
} // for loop ends
这转换为i = (+ integer.intvalue())
正确的是:
for (Integer integer : values) {
i += integer.intValue();
} // for loop ends
答案 2 :(得分:5)
您使用=+
代替+=
您可能只是将阵列中的最后一个值打印在一个中,而另一个值在另一个中打印出来?
那是因为你只是在一个中重复覆盖该值,并且实际上在另一个中正确地对这些值进行求和。
答案 3 :(得分:4)
i =+ integer.intValue();
是对一元操作+integer.intValue()
的重新分配。你用数组中的每个值覆盖i
。最后一个是最终结果。
答案 4 :(得分:4)
因为您使用的是一元运算符'+',它在符号整数上运行,并且不会添加。
所以基本上发生的事情是变量i
将在values数组中包含最后一个值。
修改强>
Use of Unary plus operator in Java
当数组值为负数时,假设为-1 在这种情况下,由于标志的旧数学规则
所以当你做i = (+ (-1)) = -1
时。答案仍然是 -1 。
因此,如果您保留数组的最后一个值-1或其他一些负值,您将获得相同的值。
答案 5 :(得分:3)
类test1代码有什么问题。它似乎应该是i + =integer.intValue()
而不是= +
答案 6 :(得分:3)
总是在= 之前编写运算符(+, - ,| etc ...)如果在没有明确编写LHS的情况下参与LHS ,请
+ =, - =,| =
或甚至比较运算符< =,> = ....
答案 7 :(得分:0)
int[] values = new int[] { 2, 3, 5, 1 };
int i = 0;
for (Integer integer : values) {
i =+ integer.intValue();// here i's value 2,3,5 and finally 1. then your out put is 1.
} // for loop ends
System.out.println("i=" + i);
但是你的下一个案例是你在数组中使用int值添加i的当前值。所以很明显你会得到数组中的一些int值。
int[] values = new int[] { 2, 3, 5, 1 };
int i = 0;
for (Integer integer : values) {
i = i + integer.intValue();
} // for loop ends
System.out.println("i=" + i);