在我的概念之中,==在对比两个基本数据类型的时候,对比的是两者的值是否相同。而在对比两个引用数据类型的时候,比较的是两者的内存地址是否相同。

而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中,这个方法已经被重写为对比内容是否一致。

最新文章

  1. C#与C++的发展历程第三 - C#5.0异步编程巅峰
  2. sqlserver 自增ID插入指定数据
  3. 解决NetBeans 8.x的字体问题
  4. C#有关数组内存的释放及动态数组问题
  5. Js 校验时间、比较时间 和转换时间格式
  6. [转]O(n)回文子串算法 Manacher算法
  7. RHCA442学习笔记-Unit11内存缓存
  8. VC++如何在程序中用代码注册和卸载ocx控件(代码)
  9. Web Host下的URL路由
  10. 圆形border渐变加载
  11. 《HelloGitHub》第 22 期
  12. 【BZOJ4199】【NOI2015】品酒大会(后缀数组)
  13. 适配器模式(adapter)
  14. 在Asp.Net中使用jQueryEasyUI(转)
  15. [转]使用自定义HttpMessageConverter对返回内容进行加密
  16. python关键字与标识符
  17. weexpack 使用
  18. Alwayson--辅助副本状态
  19. ZooKeeper的架构
  20. 基于 HTML5 Canvas 的 Web SCADA 组态电机控制面板

热门文章

  1. day38 08-Spring的id、name和scope顺序
  2. qq在线
  3. H5C3--拖拽接口的使用和实例
  4. Vue--findIndex方法的使用原理
  5. web前端学习(四)JavaScript学习笔记部分(2)-- JavaScript语法详解
  6. 深入浅出Cocoa之消息【转】
  7. 移动端以及 PC浏览器页面分享到朋友圈等的功能实现
  8. PHP生成唯一的促销/优惠/折扣码,由字母和数字组成。
  9. 24种编程语言的Hello World程序
  10. ORACLE 日常维护命令手册