obj.nil? は obj == nil の半分くらいの実行時間です。
いろいろ理由をつけてもらいましたが、これがいちばんの理由ではないでしょうか。

コード:
a = 1
1000000.times do
a == nil; a == nil; a == nil; a == nil; a == nil
a == nil; a == nil; a == nil; a == nil; a == nil
end

結果:
$ time ruby hoge.rb
real 0m8.702s
user 0m6.821s
sys 0m0.053s

コード:
a = 1
1000000.times do
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
a.nil?; a.nil?; a.nil?; a.nil?; a.nil?
end

結果:
$ time ruby hoge.rb
real 0m4.956s
user 0m3.852s
sys 0m0.035s

どうみても高速です。本当にありがとうございました。