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

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

转载于:https://www.cnblogs.com/wxdmw/p/11011729.html

关于==和equals的探索相关推荐

  1. 深入探索.NET内部了解CLR如何创建运行时对象

    前言 SystemDomain, SharedDomain, and DefaultDomain. 对象布局和内存细节. 方法表布局. 方法分派(Method dispatching). 因为公共语言 ...

  2. 探索 ConcurrentHashMap 高并发性的实现机制

    简介 ConcurrentHashMap 是 util.concurrent 包的重要成员.本文将结合 Java 内存模型,分析 JDK 源代码,探索 ConcurrentHashMap 高并发的具体 ...

  3. java 为什么重写equals一定要重写hashcode?

    前言 最近复习,又看到了这个问题,在此记录和整理,通过例子来说明这种情况的原因,使大家可以清晰明白这个问题. 初步探索 首先我们要了解equals方法是什么,hashcode方法是什么. equals ...

  4. JAVA8常量池监控_深入探索Java常量池

    Java的常量池通常分为两种:静态常量池和运行时常量池 静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面值,类和方法的信息,占用了class文件的大部分空间. 运 ...

  5. [转载]深入探索.NET框架内部了解CLR如何创建运行时对象

    深入探索.NET框架内部了解CLR如何创建运行时对象 发布日期: 9/19/2005 | 更新日期: 9/19/2005 Hanu Kommalapati Tom Christian 本文讨论: • ...

  6. 深入探索 Java 热部署--转

    在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作.本文将探索如何在不破 ...

  7. 探索 ConcurrentHashMap 高并发性的实现机制--转

    ConcurrentHashMap 是 Java concurrent 包的重要成员.本文将结合 Java 内存模型,来分析 ConcurrentHashMap 的 JDK 源代码.通过本文,读者将了 ...

  8. 美团外卖商家端视频探索之旅

    美团外卖商家端视频探索之旅 背景 美团外卖至今已迅猛发展了六年,随着外卖业务量级与日俱增,单一的文字和图片已无法满足商家的需求,商家迫切需要更丰富的商品描述手段吸引用户,增加流量,进而提高下单转化率和 ...

  9. Kotlin代码检查在美团的探索与实践

    背景 Kotlin有着诸多的特性,比如空指针安全.方法扩展.支持函数式编程.丰富的语法糖等.这些特性使得Kotlin的代码比Java简洁优雅许多,提高了代码的可读性和可维护性,节省了开发时间,提高了开 ...

最新文章

  1. CentOS 7 yum源安装Nginx
  2. HTTP请求中的缓存(cache)机制
  3. Python 之列表的常用方法
  4. Java序列化简单例子
  5. contract forward,菜鸟请教一个问题:the difference between forward contract and future contract...
  6. 对计算机组装和维护课的总结,计算机组装与维护教师工作总结
  7. kaggle实战_3模型分析与模型融合
  8. 【研报分享】华为鸿蒙深度研究.pdf(附下载链接)
  9. 调查称谷歌占北美25%互联网流量
  10. sql collection内容_非关系数据库复习|SQL到mongoDB查询语句转换
  11. BNU 鸣人的查克拉
  12. nes 红白机模拟器 第4篇 linux 手柄驱动支持
  13. K线形态识别—多K线之买入型多日K线组合
  14. namecheap ssr_如何将SSL证书和自定义Namecheap域添加到GitLab Pages站点
  15. python中的token是什么
  16. 关于Document类型的总结
  17. 山东理工ACM[2444]正方形
  18. Numpy中矩阵向量乘法np.dot()及np.multiply()以及*区别
  19. spyder快捷键大全
  20. 信息熵(entropy)定义公式的简单理解

热门文章

  1. 企业打开云HBase的正确方式,来自阿里云云数据库团队的解读
  2. ios沙盒查找图片展示
  3. hadoop-mapreduce在maptask执行分析
  4. QPushButton 与 QListWidget 的按键响应
  5. 并查集 删除节点 求集合的个数set hdu 2473
  6. tablesorter,jquery
  7. clion 使用技巧
  8. 蓝桥杯 ALGO-38 算法训练 接水问题
  9. 蓝桥杯 ALGO-28 算法训练 星际交流
  10. [Java] 蓝桥杯ALGO-103 算法训练 完数