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

Dro*_*ona 3 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);
    }
} 
Run Code Online (Sandbox Code Playgroud)

计划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);
    }
} 
Run Code Online (Sandbox Code Playgroud)

sas*_*hka 17

显然,主要区别在于这一行:

i =+ integer.intValue();
Run Code Online (Sandbox Code Playgroud)

也许它打算用来i +=代替i =+第一个程序.在你的版本中,第一个程序只是在每次迭代时分配一个值,所以它的最终结果是数组中的最后一个值(即1).你的第二个程序做了它应该做的事情 - 它添加了数组中的所有元素,结果是11.


ssi*_*lar 10

您尝试添加并分配但使用了错误的运算符.

 for (Integer integer : values) {
     i =+ integer.intValue();
 } // for loop ends
Run Code Online (Sandbox Code Playgroud)

这转化为 i = (+ integer.intvalue())

正确的是:

for (Integer integer : values) {
     i += integer.intValue();
 } // for loop ends
Run Code Online (Sandbox Code Playgroud)


Wil*_*son 5

你正在使用=+而不是+=

您可能只将阵列中的最后一个值打印在一个中,而另一个值在另一个中打印出来?

那是因为你只是在一个中重复覆盖该值,并且实际上在另一个中正确地对这些值求和.