weppos совершенно правильно для второй части вашего вопроса. В первой части есть небольшая разница в равенстве в зависимости от того, как вы тестируете.
instance1.eql?(instance2)
=> true
.eql? проверяет, имеют ли объекты одинаковый тип и значение, тогда как
instance1.equal?(instance2)
=> false
.equal? проверяет, имеют ли объекты один и тот же object_id и возвращает false, потому что
instance1.object_id
=> 18277960
instance2.object_id
=> 18271750
На эту тему есть хорошая статья здесь