关于==和equals的探索
2024-09-06 15:13:02
在我的概念之中,==在对比两个基本数据类型的时候,对比的是两者的值是否相同。而在对比两个引用数据类型的时候,比较的是两者的内存地址是否相同。
而equals方法,我一直认为这个方法是对比两个引用数据类型的值是否相同的。
但是,今天看到有人说,equals想要比较两个引用数据类型的内容是否一致,需要重写。因为Object的equals方法是比较地址是否一致的。
然后我就疑惑了,以前好像也没重写就可以比较呀,是我记错了么?
于是,我决定详细探究一下equals方法。
Integer s=new Integer(2);
Integer s1=new Integer(2);
System.out.println(s==s1);
System.out.println(s.equals(s1));
可以看到,s和s1是两个对象,内存地址不同,而内容是相同的。
返回结果为:
false
true
那么问题来了,我没有对equals方法进行重写,那么返回值不应该是两个false么?
于是,我看了一下Integer的equals底层代码
public boolean equals(Object obj) {
if (obj instanceof Integer) {
return value == ((Integer)obj).intValue();
}
return false;
}
又查看了一下Object的底层代码
public boolean equals(Object obj) {
return (this == obj);
}
可以看到在Object中,equals的确是用于对比内存地址是否一致的,而在Integer中,这个方法已经被重写为对比内容是否一致。
最新文章
- C#与C++的发展历程第三 - C#5.0异步编程巅峰
- sqlserver 自增ID插入指定数据
- 解决NetBeans 8.x的字体问题
- C#有关数组内存的释放及动态数组问题
- Js 校验时间、比较时间 和转换时间格式
- [转]O(n)回文子串算法 Manacher算法
- RHCA442学习笔记-Unit11内存缓存
- VC++如何在程序中用代码注册和卸载ocx控件(代码)
- Web Host下的URL路由
- 圆形border渐变加载
- 《HelloGitHub》第 22 期
- 【BZOJ4199】【NOI2015】品酒大会(后缀数组)
- 适配器模式(adapter)
- 在Asp.Net中使用jQueryEasyUI(转)
- [转]使用自定义HttpMessageConverter对返回内容进行加密
- python关键字与标识符
- weexpack 使用
- Alwayson--辅助副本状态
- ZooKeeper的架构
- 基于 HTML5 Canvas 的 Web SCADA 组态电机控制面板