我正在学习 Java,我有一个关于数据类型的问题。
原始类型的变量存储单个值。当我为其分配一个新值时,旧值将丢失。
现在通过引用变量,我提出了一个例子,我有一个名为 的类Auto
,有一个名为 的实例变量Color
。
如果我创建该类的两个对象,它们都将指向内存中的“相同”,但每个对象都将保存实例变量的单独副本,因此我可以更改一个对象的 Color 值,而不会影响另一个对象。。但是,如果我销毁该对象,则对两者的引用都会丢失(我假设它们会指向null
)。
我的这个概念正确吗?
我正在学习 Java,我有一个关于数据类型的问题。
原始类型的变量存储单个值。当我为其分配一个新值时,旧值将丢失。
现在通过引用变量,我提出了一个例子,我有一个名为 的类Auto
,有一个名为 的实例变量Color
。
如果我创建该类的两个对象,它们都将指向内存中的“相同”,但每个对象都将保存实例变量的单独副本,因此我可以更改一个对象的 Color 值,而不会影响另一个对象。。但是,如果我销毁该对象,则对两者的引用都会丢失(我假设它们会指向null
)。
我的这个概念正确吗?
为了补充@NaCl的好答案,我认为这部分值得怀疑:
让我们设计类
Auto
和Color
:您只能使用单词创建对象的新实例
new
。通过使用创建两个实例new
并将它们分配给不同的变量,这些变量将指向不同的内存位置。这可以在图像中看到:如果我们
Color
在 的两个实例中使用相同的实例Auto
,结果将如下:如果您要更改其中另一个的颜色值,则只有另一个会受到影响:
当您使用原始类型时,为其分配一个值会“覆盖”旧值,所以是的,它实际上是丢失了,因为变量值可以随时更改。
例如,当您使用对象时,假设您有类
Auto
:然后为它分配一个新实例:
如果我们执行以下操作,您将有一辆新车存放在内存中:
新变量
OtroToyota
指向我们之前创建的新实例的引用,这意味着当您更改任何实例中的值时,该值在您对该对象的所有引用中都会更改,例如:所以是的,你的概念是正确的,直到你以关键字定义的实例为目标
new
。如果您分配null
给 2 个中的一个,则另一个(以及指向该实例的所有其他指针)将受到影响。请参阅以下实现作为示例:
所以你最终总结的答案是“是”,但没有实例的“副本”保存在指针中(或者我理解)。