问题 “原始值不与其他原始值共享状态”是什么意思?


Java语言规范的4.2节 指出,“原始价值不与其他原始价值共享状态”。这到底是什么意思?


5511
2018-05-08 02:11


起源

意味着原始值不是对象 - rpg711


答案:


我怀疑它正在区分基元和引用类型 - 在后一种情况下,两个值(引用)都可以引用同一个对象。如果你有两个 原始 变量,你无法做任何会影响另一个的变量。

然而,它的措辞并不是非常明显,因为即使使用引用类型,值本身(引用)也不共享状态;特别是,更改一个引用类型变量的值不会更改另一个变量的值...它是对象本身的状态,它是具有相同值的共享“via”变量。


5
2018-05-08 02:16



@ElliottFrisch:在第二句中改变了“with”到“to”......更清楚了吗? - Jon Skeet
是。我可能添加的唯一另一件事是它与Pascal和C(和C ++)等语言形成鲜明对比,你可以在其中获取地址和/或获取指向基元的指针。 - Elliott Frisch
非常感谢你!我的理解是,当一个原始变量等于另一个原始变量时,前者只得到后者的值,而不是后者的地址。 - Ryan
@Ryan:是的,但那是真的 所有 变量。 - Jon Skeet


这意味着基本类型的每个值在内存中占据其自己的空间,表示不能与其他值共享的状态。换句话说,您不能以任何方式直接或通过复合赋值运算符更改变量的状态或基本类型的字段。

这与参考类型形成对比,参考类型可以通过“指向”同一对象来共享或不共享状态。您可以通过操作不同的变量来更改参考对象。


6
2018-05-08 02:19



我的理解是,当一个原始变量等于另一个原始变量时,前者只得到后者的值,而不是后者的地址。 - Ryan
@Ryan Java变量永远不会共享一个地址,因此所有变量都是如此。对于基元,存储的值也不共享地址,而引用变量(即对象)的值可以共享地址(即,是相同的对象)。 - dasblinkenlight