首页 > 代码库 > 两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?
两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?
也对,也不对。
如果此对象重写了equals方法,那么可能出现这两个对象的equals相同,而hashcode不同。
如果此对象继承Object,没有重写equals方法,那么就使用Object的equals方法,Object对象的equals方法默认是用==实现的,那么如果equals相同,hashcode一定相同。
Object 的equals方法:
==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。
public boolean equals(Object obj) { return (this == obj); }
String 重写了equals方法:
只要两个引用所指向的对象是两块含有一样字样的字符串的话,那么就返回true
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String)anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
两个对象值相同(x.equals(y) == true),但却可有不同的hashcode,这句话对不对?
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。