java关于hashcode,equals,==的疑问

2024-12-04 01:52:01
推荐回答(5个)
回答1:

hashCode()和equals(Object o)方法是java所有类的基类Object类中的方法,所有类都继承了Object类以及其中的方法。equals与hashCode的定义必须一致,即:如果x.equals(y)返回true,那么x.hashCode()就必须与y.hashCode()具有相同的值。当然,对于两个不同的对象,x.hashCode()与y.hashCode()基本不会相同(不排除极少数情况会相同)。
在基类Object类中,默认的equals方法是判断两个对象是否具有相同的引用,如果具有相同的引用,那它们必然是相等的。不过这种判断方法并不是一直都通用,比如:有的时候,两辆汽车,只要型号配置相同,就可以认为是相等的,出厂日期可以忽略不计。这种时候就需要在你的类中重写equals方法,对于这个类用你自己的方法来判断两个对象是否相等(重写equals方法就必须重新定义hashCode()方法)。
注:如果对两个对象进行==操作,那么就会自动调用Object类默认的equals方法来进行比较。希望能帮到你~

回答2:

1、 理解正确

2、先判断hashcode是否相同,不同才判断数据是否一致,这是哈希表的特征,主要是依靠哈希值来优化比较。一般用于判断无不重复元素的集合。
==是用于判断地址相同,但不同地址中有可能储存相同内容。任何两个对象均可以比较。

回答3:

hashcode相等,两对象不一定相等,但是两对象相等,hashcode一定相等,
==是比较两对象的地址,
而equals开始比较的也是两对象的地址,
由于equals方法被重写了,所以现在equals比较的是两个对象的值。

回答4:

说的通俗一点,以后使用,比较string类型的时候用equlse,比较的是内容,要比较别的类型时用==,这儿比较的是两个完全相等的变量,如果string类型为空时也用==,比如,String a=null;if(a==null),在实际开发中,记住怎么用就行,不过这个只在java代码里这么用,在js中就简单多了,直接用==就可以,浏览器会匹配所有可能相等的逻辑关系,因为在js中没有String,只有var,总是纠结这个东西,在概念里理解,会越来越糊涂,就像问你走路迈哪只脚一样,你要想这个,总有一天不会走路了。

回答5:

1、每一个自定义的类都会继承Object,当然也会拥有Object的equals和hashcode方法
2、Object的equals方法默认是比较两个类的内存地址,等同于:对象1==对象2
3、重写父类的方法equals方法,则重写的方法(equals)会在比较该类的两个对象是调用且至调用该方法(不调用hashcode)。
4、重写父类的方法hashcode方法,则重写的方法(hashcode)只会存放该类对象的两个Set容器比较时调用。先调用equals,equals为false时调用hashcode。