java随笔
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 。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 邱维东!
评论