gpt4 book ai didi

java - 在 Java 中赋值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:40:01 26 4
gpt4 key购买 nike

假设我设置 int A = int B。当我之后更改 A 时,它不会更改 B 的值。但是当我设置 SomeClass A = SomeClass B 时,我更改了 A 的内容(如 a.cost),它也改变了 B.cost。谁能给我解释一下?

我以为 Java 是按值分配的,而不是按引用分配的?

最佳答案

是的,确实如此 - 但 A 的值是一个引用,而不是对象本身的副本。

我喜欢打个比方...

假设两个人都有我的地址:这就像 Java 中 House 类型的两个变量。现在他们中的一个来了,把我的门漆成红色。如果第二个人访问,仍然会看到红色的门:

House jonsHouse = new House(); // Even the variable jonsHouse is only a reference

House firstAddressCopy = jonsHouse; // Just a copy of the reference
House secondAddressCopy = jonsHouse; // Just a copy of the reference

firstAddressCopy.paintDoor(Color.Red);

Color color = secondAddressCopy.getDoorColor(); // Now color will be red

基本上,记住一些规则,事情就会变得清晰:

  • Java 中表达式的值绝不是一个对象——永远只是一个引用或原始值
  • (第一点的推论)变量从不持有一个对象——只持有一个引用或原始值
  • 赋值(和参数传递)总是复制值,无论该值是引用还是原始值

关于java - 在 Java 中赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3858510/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com