Rubyの == と equal? と === と eql? のまとめ
==
数値、文字列、配列などで、「等しいかどうか」「同じ内容かどうか」を調べるのに使います。別のオブジェクト(別のインスタンスへの参照)でも同じ内容ならtrueになります。
Rubyでは数値と文字列の間の自動変換は行われませんので、1 == "1"はfalseです。整数と浮動小数点数の間では自動変換が行われ、1 == 1.0はtrueになります。
自作のクラスのオブジェクトどうしを ==で比較したいときは、==メソッドを定義します。==を定義しないと、equal?と同じく「同じオブジェクトかどうか」になります。
equal?
常に「同じオブジェクトかどうか」を調べるのに使います。自作のクラスでequal?を定義してはいけません(定義できてしまいますが)。
===
case式で値をテストするのに使われます。case a ; when b とするとb === aが評価されます。通常は==の結果と同じですが、Module、Range、Regexpでは別の意味になります。
===はEnumerable#grepでも使われます(ここ忘れないこと>俺)。
===を直接使うことはありませんが、Module、Range、Regexpで使うのはありかな?(is_a?やkind_of?のかわりに String === obj とするとか)。自作のクラスで===を定義することはほとんどないでしょう。
ちなみに、PHPでは 1 == "1"は真、1 === "1"は偽、のように===は「等しく型も同じ」を調べるのに使います。JavaScriptも同様。