java关于hashcode,equals,==的疑问
答案:6 悬赏:40 手机版
解决时间 2021-01-20 22:08
- 提问者网友:练爱
- 2021-01-20 02:34
java关于hashcode,equals,==的疑问
最佳答案
- 五星知识达人网友:独钓一江月
- 2021-01-20 03:54
1、 理解正确
2、先判断hashcode是否相同,不同才判断数据是否一致,这是哈希表的特征,主要是依靠哈希值来优化比较。一般用于判断无不重复元素的集合。
==是用于判断地址相同,但不同地址中有可能储存相同内容。任何两个对象均可以比较。
2、先判断hashcode是否相同,不同才判断数据是否一致,这是哈希表的特征,主要是依靠哈希值来优化比较。一般用于判断无不重复元素的集合。
==是用于判断地址相同,但不同地址中有可能储存相同内容。任何两个对象均可以比较。
全部回答
- 1楼网友:山有枢
- 2021-01-20 08:04
说的通俗一点,以后使用,比较string类型的时候用equlse,比较的是内容,要比较别的类型时用==,这儿比较的是两个完全相等的变量,如果string类型为空时也用==,比如,String a=null;if(a==null),在实际开发中,记住怎么用就行,不过这个只在java代码里这么用,在js中就简单多了,直接用==就可以,浏览器会匹配所有可能相等的逻辑关系,因为在js中没有String,只有var,总是纠结这个东西,在概念里理解,会越来越糊涂,就像问你走路迈哪只脚一样,你要想这个,总有一天不会走路了。
- 2楼网友:时间的尘埃
- 2021-01-20 07:06
==和equals是判断内存地址,在Object类中equals就是==。但是equals是一个方法,可以被子类重写。你在String类可以看到equals已经被重写成比较String的值了。而hashcode是根据的你的值来生成的,相同的值有相同的hashcode
- 3楼网友:患得患失的劫
- 2021-01-20 06:21
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方法来进行比较。希望能帮到你~
在基类Object类中,默认的equals方法是判断两个对象是否具有相同的引用,如果具有相同的引用,那它们必然是相等的。不过这种判断方法并不是一直都通用,比如:有的时候,两辆汽车,只要型号配置相同,就可以认为是相等的,出厂日期可以忽略不计。这种时候就需要在你的类中重写equals方法,对于这个类用你自己的方法来判断两个对象是否相等(重写equals方法就必须重新定义hashCode()方法)。
注:如果对两个对象进行==操作,那么就会自动调用Object类默认的equals方法来进行比较。希望能帮到你~
- 4楼网友:鸠书
- 2021-01-20 05:24
hashcode相等,两对象不一定相等,但是两对象相等,hashcode一定相等,
==是比较两对象的地址,
而equals开始比较的也是两对象的地址,
由于equals方法被重写了,所以现在equals比较的是两个对象的值。
==是比较两对象的地址,
而equals开始比较的也是两对象的地址,
由于equals方法被重写了,所以现在equals比较的是两个对象的值。
- 5楼网友:醉吻情书
- 2021-01-20 04:48
1、每一个自定义的类都会继承Object,当然也会拥有Object的equals和hashcode方法
2、Object的equals方法默认是比较两个类的内存地址,等同于:对象1==对象2
3、重写父类的方法equals方法,则重写的方法(equals)会在比较该类的两个对象是调用且至调用该方法(不调用hashcode)。
4、重写父类的方法hashcode方法,则重写的方法(hashcode)只会存放该类对象的两个Set容器比较时调用。先调用equals,equals为false时调用hashcode。
2、Object的equals方法默认是比较两个类的内存地址,等同于:对象1==对象2
3、重写父类的方法equals方法,则重写的方法(equals)会在比较该类的两个对象是调用且至调用该方法(不调用hashcode)。
4、重写父类的方法hashcode方法,则重写的方法(hashcode)只会存放该类对象的两个Set容器比较时调用。先调用equals,equals为false时调用hashcode。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯