equals 和 ==

对于值类型,== 判断两个值是否相等,而对于引用类型,== 则判断是否引用的同一个对象。
至于 equals 方法,值类型没有 equals 方法,对于引用类型,默认情况也是判断是否引用同一个对象,可以重写该方法以判断两个对象是否相等。

如果两个对象 equals 返回结果为 true,那么 hashcode 返回的结果也应该相等。但是 hashcode 相等,两个对象却不一定相等(指 equals 返回true)。

javascript 中也有 ===== 以及 is 这三种比较方法,=== 是严格的相等判断,不会进行类型转换,is=== 类似,== 会进行类型转换然后判断相等。但是这三个比较方法对于引用类型来说,都只会比较两个引用是否指向同一个对象。(注意,JavaScript 的值类型包括 string )

如果要比较类对象的值是否相等,可以为类添加一个 hash 函数,然后比较 hash 函数的返回值。

ruby 中,相等性判断可以使用 =====eql?equal?
由于 ruby 中一切皆对象,所以不需要考虑值类型的判断,=== 主要用于 case 语句中的相容性判断,对 == 进行了扩展,可以判断一个元素是否属于某个 range
默认情况下,== 将判断两个对象的 object_id 是否相同(即是否引用了同一个对象)
一般来说,子类会重写 == 方法,以便进行值的比较。eql? 比较对象的 hash 值来判断相等,比 == 更加严格。
equal? 用于比较两个对象是否具有相同的 object_id 。