用Java分配?

Bre*_*ent 7 java

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

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

Jon*_*eet 23

是的,确实如此 - 但A的值是参考,而不是对象本身的副本.

我想给出以下类比......

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

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
Run Code Online (Sandbox Code Playgroud)

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

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