没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
4页
一、趣谈 (1)、面试题 面试官:“你知道equals和==有什么区别吗?” 我的心理活动:这不是送分题吗?今早上刚背过,我要回答的有逼格一点,这样我就可以获得面试官的认可,得到这份工作,在不久的将来就会出任CEO,迎娶白富美,走向人生巅峰。 面试官:”喂,你知道吗?” 我:“不好意思面试官,刚才在总结思路。关于这个问题,我是阅读过jdk源码的,equals是比较对象内容,==是比较对象地址。” 面试官:“你确定吗?你看的那部分源码?” 我:“。。。。。。” 面试官:“好了,你回去等通知吧。” (2)、一些思考 关于上面的面试题,我相信很多小伙伴会脱口而出,equals比内容,==比地址。那么
资源详情
资源评论
资源推荐
关于关于equals()方法,方法,jdk源码给出如下五点建议源码给出如下五点建议
一、趣谈一、趣谈
((1)、面试题)、面试题
面试官:面试官:“你知道你知道equals和和==有什么区别吗?有什么区别吗?”
我的心理活动:这不是送分题吗?今早上刚背过,我要回答的有逼格一点,这样我就可以获得面试官的认可,得到这份工作,在不久的将来就会出任CEO,迎娶白富美,走向人生巅
峰。
面试官:面试官:”喂,你知道吗?喂,你知道吗?”
我:“不好意思面试官,刚才在总结思路。关于这个问题,我是阅读过jdk源码的,equals是比较对象内容,==是比较对象地址。”
面试官:面试官:“你确定吗?你看的那部分源码?你确定吗?你看的那部分源码?”
我:“。。。。。。”
面试官:面试官:“好了,你回去等通知吧。好了,你回去等通知吧。”
((2)、一些思考)、一些思考
关于上面的面试题,我相信很多小伙伴会脱口而出,equals比内容,==比地址。那么真实情况是什么呢?让我们看看jdk源码来分析这个问题。
没错,这就是Object(the root of the class hierarchy)中equals()方法的源码,仅仅是使用”==”来判断。那么有为什么会有equals方法比较内容这一说法呢。究其根本是因为究其根本是因为java的多态的多态
机制,我们的机制,我们的jdk中帮我们重写了一些类的中帮我们重写了一些类的equals方法(封装类,方法(封装类,String等)等),所以看起来好像equals方法是比较内容一样。当我们使用自定义对象时,我们调用equals方法很明显是
比较两个对象的地址。如果我们也想比较内容那么就要重写equals方法。
二、二、JDK源码中的建议源码中的建议
((1)、)、equals()的使用的使用
我们重写我们重写equals方法大部分是因为要将自定义方法大部分是因为要将自定义bean作为作为HashMap的的key时。时。 我们接下来看看HashMap中常用的几个用到equals()的地方。
1. boolean containsKey(Object key);
containsKey(Object key)
public boolean containsKey(Object key) {
return getNode(hash(key), key) != null;
}
hash(Object key)
//根据对象的hashCode()方法返回一个int
static final int hash(Object key) {
int h;
//可以从这里看出,HashMap允许key为null。
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
getNode(int hash, Object key)
这段代码Josh Bloch(超级牛,感兴趣可以百度,可以说没有他,就没有这么优秀的作品)是作者之一,他的风格一向如此,喜欢在逻辑运算符上赋值,所以初看可能比较费劲。 注意注意
看红框里的都是赋值操作,然后用赋的值本身去做逻辑运算。看红框里的都是赋值操作,然后用赋的值本身去做逻辑运算。 我们可以看到判断一个key是否存在,(去掉一些边界判断) 首先查看首先查看hash()值是否相等,然后查看对象是否地址相同值是否相等,然后查看对象是否地址相同
(即同一个对象)或调用(即同一个对象)或调用equals()查看是否相等。查看是否相等。
2.V get(Object key);
public V get(Object key) {
Node e;
return (e = getNode(hash(key), key)) == null ? null : e.value;
}
可以看到这个调用了刚才上面的代码。
3.public V put(K key, V value) ;
public V put(K key, V value) {
return putVal(hash(key), key, value, false, true);
}
weixin_38556541
- 粉丝: 6
- 资源: 970
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- MyBatis动态SQL是一种强大的特性,它允许我们在SQL语句中根据条件动态地添加或删除某些部分,从而实现更加灵活和高效的数据
- 关于mybatis的一些相关资源
- 关于mybatist的一些相关资源
- uni-app实战社区交友类app开发&带视频教程
- mybatis动态sql的一些相关资源
- 隐马尔可夫模型在期货市场的应用_曾琦裕 (1).caj
- 极域解控和极域反控!!!
- 安卓android-serialport-api 串口demo源代码.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0