【问题标题】:Difference between a=b and b=a, foreach loopa=b和b=a的区别,foreach循环
【发布时间】:2017-05-29 11:43:30
【问题描述】:

我做了一个小程序,输出一个身高/体重比最高的人。我做了一个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; 这会输出第一人称。

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

【问题讨论】:

  • 请去学习一些基础知识,你会找到答案
  • 既然设定值A等于值B就等于设定值B等于值A ;)
  • "highestSoFar = person; 这会输出一个比率最高的人。"不,它没有。它改变了highestSoFar的值
  • 人 = highsofar 。如果您稍微抬头,您实际上会看到highestSoFar = this.members.get(0)。因此它永远是第一人称。
  • "对我来说应该是一样的。" int a=0; int b=1; a=b; 和int a=0; int b=1; b=a;a=b 与b=a 相同,并且这两个代码相同,那么a 和b 在该操作之后会有什么值? 0 还是 1?赋值运算不能是可交换的。

标签: java loops foreach


【解决方案1】:

如果您将highestSoFar 分配给personhighestSoFar 在循环内永远不会改变,并且一直引用它的初始值 - this.members.get(0)

如果您按照应有的方式将person 分配给highestSoFar,您的循环会找到divide() 最高的人。

【讨论】:

  • 是否可以在迭代期间使用 Java 中的 for 语句修改集合中的项目?在 C# 中这是不可能的,因此 'person = highestSoFar' 将导致异常“无法分配,因为它是迭代变量/只要集合保持不变,枚举器就保持有效。”。 Java 也一样?
  • @CasparKleijne 因为 Java 没有指针/引用 person = highestSoFar 对原始 List 根本没有影响。 (它会让局部变量 person 指向另一个对象,但保持列表中的原始引用不变)
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      你有两个部分在做作(左部分和右部分)。

      在做作中,左边部分的值会丢失,而会收到右边部分的值。右边部分不会改变。

      a = b ==> 将 a 的内容替换为 bb 不会改变,a 会改变。

      b = a ==> 将 b 的内容替换为 aa 不会改变,而 b 会。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-27
        • 2012-07-03
        • 1970-01-01
        • 2016-05-04
        • 2012-06-26
        相关资源
        最近更新 更多