【问题标题】:If a = b, what happens if each value changes respectively?如果a = b,如果每个值分别改变会发生什么?
【发布时间】:2015-06-17 11:15:30
【问题描述】:

如果您更改变量b 会发生什么,或者如果您更改a 会发生什么。订单与任何事情有什么关系。

我知道count = count + 1,但这两个变量让我的大脑变得混乱。

b = 7;
a = 7;
a = b;
a += 1;

b 会发生什么?

【问题讨论】:

  • 请发布完整的、可重现的 sn-p 代码并添加 Java 标记。您可以使用“编辑”链接执行此操作。
  • 谢谢!感谢您的帮助
  • b 没有任何反应。阅读左值与右值。
  • 尝试运行你的代码... System.out.println.....
  • 你知道原始类型吗?实例,参考?简短的回答:如果 b 会改变,它不仅会弄乱你的头,还会弄乱每个人的头。这会让生活变得更加艰难。

标签: java variables


【解决方案1】:

b 会发生什么?

b 没有任何反应。

当你这样做时

a = b;

您正在复制存储在b 中的 并将其放入a。 (您没有a 设为b 的别名。)

当您执行a += 1; 时,您将更改存储在a 中的值(并且存储在b 中的值保持不变)。

您可以通过在您的代码 sn-p 之后打印最终值来验证这一点:

System.out.println(a);  // prints 8
System.out.println(b);  // prints 7

如果您更改变量b 会发生什么,或者如果您更改a 会发生什么。顺序与什么有什么关系。

ab 是两个独立变量,改变一个永远不会影响另一个。

顺序很重要,因为当您执行 a = b 时,b 的值将被复制到 a 中,并且之前存储的任何 a 都将被丢弃。如果您在a = b 之前完成了a += 1,那么a 将再次恢复为7。

【讨论】:

  • 是的,我做到了。另外,为什么会有反对票?我无法打印或做任何事情,因为我在图书馆并且无法运行代码。
  • 这种情况并不常见,所以我认为人们只是因为“缺乏努力”而投反对票。未来提示,您可以使用ideone.com(例如:ideone.com/xaoGwm)。
【解决方案2】:

int 是原始类型,您不复制引用而是复制值本身。这对于 Integer 的工作方式相同,因为它是 immutable 类。

 int b = 7;
 int a = 7;
 a = b;
 a+=1;
 System.out.println(a);// ->8
 System.out.println(b);// ->7

【讨论】:

  • 您对Integer 的引用有点令人困惑。它不仅仅是不变性。 (例如,如果不是自动装箱,您将无法执行 +=。)
  • @aioobe for sure more info here 我只是想避免混淆为什么某些类不能作为参考。
【解决方案3】:

还是 7。 integer 是原始类型,如果将 int 变量分配给另一个 int,则新变量只会接收其值。不是对象本身。

【讨论】:

    【解决方案4】:

    b 保持 7.
    a 变为 8。

    您可以使用System.out.println(); 打印变量的值,如果您有任何疑问,请自行查找。 或者使用调试器。

    【讨论】:

      【解决方案5】:
      public static void main(String[] args) {
              int b = 7; // b points to 7
              int a = 7; // a points to 7
              a = b; // b and a points to 7
              a += 1; // a points to 8 now, b is still pointing to 7
              System.out.println(a);
              System.out.println(b);
          }
      

      输出

      8
      7
      

      当我们执行a += 1; 时,我们会更改a 中存储的值(b 中存储的值仍然相同)。

      【讨论】:

        猜你喜欢
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-10
        • 2022-10-24
        • 2020-06-01
        • 2018-11-17
        • 2016-05-02
        相关资源
        最近更新 更多