我不明白为什么clone
使用Object
运算符生成true
不会返回==
,clone
String
obj = Object.new
copy = obj.clone
obj == copy # => false
a = "a string"
c = a.clone
a == c # => true
1}}。投入赞赏。
{{1}}
答案 0 :(得分:1)
因为字符串上的==运算符只是比较字符串的值。例如
"foo"=="foo" #=>true
对象比较对象id,除非在使用==运算符时另有说明
foo.new==foo.new #=>false
因为这两个对象不具有相同的ID。
如果你重载了Object的==运算符,你也可以使它成为现实,但是默认情况下它不会在String类覆盖==运算符以比较字符串的值时。希望有所帮助。
答案 1 :(得分:0)
==运算符的默认行为是比较两个对象的object_id。使用dup或clone创建新对象时,新对象具有新的对象ID。 因此,
false, obj == copy
但是继承类可以覆盖==的这种行为。 String覆盖==比较字符串的值而不是object_id。因此,当两个字符串具有不同的object_id时,它们可以相等,因为它们具有相同的值。