a = b和b = a,foreach循环之间的差异

时间:2017-05-29 11:43:30

标签: java loops foreach

我制作了一个小程序,输出一个身高/体重比最高的人。我做了一个foreach循环:

public Person highestDivideRating() {
    if(this.members.isEmpty()) {
        return null;
    }

    Person highestSoFar = this.members.get(0);

    for(Person person : this.members) {
        if(person.divide() > highestSoFar.divide()) {
            highestSoFar = person;
            //person = highestSoFar;
        }

    }
    return highestSoFar;
}

highestSoFar = person;这会输出比率最高的人。

person = highestSoFar;这会输出第一个人。

有人可以解释一下吗?对我来说应该是一样的。

4 个答案:

答案 0 :(得分:2)

如果您将highestSoFar分配给person,则highestSoFar永远不会在循环内更改,并始终引用其初始值 - this.members.get(0)

如果您将person分配给highestSoFar,那么您的循环会找到divide()最高的人。

答案 1 :(得分:0)

a = b与java中的b = a不同。

来自java docs

  

您遇到的最常见的操作员之一就是简单   赋值运算符" ="。   它将右侧的值赋给左侧的操作数。

所以当你这样做时:

a = b; //it means b's value is assigned to a

当你这样做时:

b = a; //it means a's value is assigned to b

现在,您可以再次查看代码以了解实际发生的情况。

答案 2 :(得分:0)

在第二种情况下,您在highestSoFar变量中设置第一个值,之后不要修改此变量。

答案 3 :(得分:0)

你在做作中有2个部分(左侧部分和右侧部分)。

在做作中,左侧部分值将丢失并将接收右侧部分的值。正确的部分不会改变。

a = b ==>用 b 替换 a 的内容。 b 不会改变, a 会改变。

b = a ==>用 a 替换 b 的内容。 a 不会改变, b 会改变。