2009/11/19

Rubyの面白いところ Part 6 「==演算子の意味はJavaと異なる」

==演算子は、Objectクラスではequal?メソッドと同じ意味に過ぎず、2個のオブジェクト参照が等しいかどうかをテストする。これは次と等しい。

a.object_id == b.object_id

しかし、ほとんどのクラスでは、インスタンスは別でも値が等しいかどうかをテストできるように定義しなおされている。

a = "Ruby"
b = "Ruby" # 内容は同じだが別のStringオブジェクト
a.equal?(b) # false: aとbは同一のオブジェクトではない
a == b # true: しかし、2つの異なるオブジェクトは同じ値を持っている

Javaは2つのオブジェクトが同一オブジェクトかどうかをテストするときには==演算子、2つの別々のオブジェクトが同じ値かどうかをテストする時にはequalsメソッドを使う習慣になっているため、ちょうど逆である。
プログラミング言語 Ruby 第2刷 80ページ より

2011/04/27 追記
参考: Rubyリファレンス日記

0 件のコメント: