Dude car = new dude(name="honda", year=1998);
Dude park = new Dude(name="blah", year=1996);
car=park;
我是OOP的新手,我有时会看到这些参考变量设置为彼此相等,即使它们具有不同的值。也许我误解了一些事情。可以解释为什么你要设置一个彼此相等的对象吗?
答案 0 :(得分:5)
我会假设Dude
是一个类,而不是结构。
可以解释为什么要将对象设置为彼此相等吗?
你没有设置"一个彼此相等的对象"。
您有两个变量,car
和park
,每个变量都能够指向类型{的 对象 {1}}。
然后,您创建一个名为" honda"的新Dude
并使变量Dude
指向它。您为car
做了类似的事情。
最后一行的作用是使park
变量指向与car
相同的对象。
现在你有两个变量指向一个名为" blah"的家伙,并且没有指向名为" honda"的家伙的变量。
答案 1 :(得分:0)
让我们区分“对象”和“变量”。我们这里有两个类型Dude
的对象 - 第一个用“honda”和1998初始化,第二个用“blah”和1996.这些是对象,在内存中分配,与该课程中涉及的所有逻辑。
现在,您还有两个变量。第一个名为“汽车”,第二个“公园”。首先,变量“car”最初指向“honda”对象,变量“park”指向“blah”对象。
你的第三行更改了赋值,所以现在“car”和“park”都指向“blah”对象,并且没有变量指向“honda”对象。现在无论您是访问car.name
还是park.name
,都可以从同一个对象获得相同的值。垃圾收集器最终将拾取未引用的对象。
答案 2 :(得分:0)
您没有将对象设置为彼此相等,而是将一个设置为等于另一个。赋值运算符(=
)将左侧设置为等于右侧,丢失该行之前左侧的值。
答案 3 :(得分:0)
变量可以是原始类型,如int
或class
es的实例,指向object
,如String
。您可以将变量的值分配给另一个变量,这在很多情况下都很有用。例如,您可能有一个名为class
的{{1}},其中包含User
字段。当有人登录时,他会输入username
和密码,您希望修改username
对象的状态,使其User
字段(也是string
)名为object
的{{1}}包含您输入的username
。稍后,您可以获得username
的{{1}},因为其字段将保存username
作为输入值。
答案 4 :(得分:0)
当您编写car = park;
时,car
的初始值将永远丢失,因为指向它没有任何内容,垃圾收集器将收集它以清除您的内存。现在两个变量指向对象park
的相同值。你问为什么要两个变量指向同一个对象?好吧,我想不出目前的好例子,但也许你想在同一个变量上初始化新对象(例如,因为你喜欢变量的名称),你也想保留旧的对象。在这种情况下,在创建new
对象之前,您需要指向您的实例的其他相同类型的对象。这样你就不会丢失对象的引用,也不会永远丢失。