基本Java问题:产生不同结果的等效整数算术

时间:2013-07-05 06:52:42

标签: java

有人可以解释以下两个程序之间的区别吗?它们看起来与我相当,但它们会产生不同的输出。是什么原因?

程序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);
    }
} 

8 个答案:

答案 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);