我制作了一个小程序,输出一个身高/体重比最高的人。我做了一个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;
这会输出第一个人。
有人可以解释一下吗?对我来说应该是一样的。
答案 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 会改变。