对象与字符串克隆和==运算符

时间:2014-07-17 16:35:26

标签: ruby string object clone equality

我不明白为什么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}}

2 个答案:

答案 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时,它们可以相等,因为它们具有相同的值。