这是引用和原始之间的基础区别。在这两种情况下,您都将获得实际 值 ,但只有在使用对象的情况下,才有机会影响该对象的任何其他用法。
让我们来看一下代码。
int a = 10;int b = a;
这两个声明表示以下内容:
- 将值10分配给名为的int标识符
a
。 - 将的值分配
a
给名为的int标识符b
。
到目前为止,一切都很好。我们在哪儿都说不出这
a点
b;我们只取价值观。
如果我们声明:
b = 30;
我们是说 取值30并将其分配给标识符b
。
a那时我们什么也没做。它已经包含值
10。这就是为什么
a和
b有所不同。
现在,当我们到达物体时,表面上的东西并没有真正改变…
Dimension a1 = new Dimension(5, 10);Dimension b1 = a1;
我们将其翻译为:
- 将具有(int)参数5和10的新Dimension的实例化值分配给
Dimension
identifiera1
。 - 将的值分配
a1
给Dimension
标识符b1
。
我们仍然 在这里分配 值
,因为Java是按值传递。这里的缺点是,在Java中,对象的值仍然是对该对象的引用。
通过上面的示例,
a1并
b1指向 相同的实例 。
现在,当我们声明以下内容时:
b1.height = 30;
我们实际上是在说:
- 将值30分配给
height
通过value取消引用的字段b1
。
我们仍指的是
b1此处与绑定的值
a1。这就是为什么您看到差异的原因;因为
a1和
b1引用相同的值(即相同的引用),所以通过标识符完成的任何更改都会通过
b1反映出来
a1。



