当前位置: 首页 > news >正文

Java 看一眼equals吧,都用这么久了

前言


== 和 equals 的区别是什么?

这似乎是每个java程序员都看过的一道题,简单,确实理解非常简单,根本不用怎么理会。

 

但是前段时间面试,我有对一些2-3年的求职者问过这个问题。
不过我问的不是区别是什么,我只是问了,你有点进去看过源码么?
(同样,你有点进去看过源码么?这句话似乎是我面试别人的时候说的最多的一句话。)

为什么这么喜欢说这个? 我就是单纯地想看看有没有看源码的习惯。 
得到很多答案都是: 没有,但是我知道他们的区别和怎么使用。 ok的,这样也是ok的。

 

正文

俺今天就非得让看到这个文章的人,理会理会一些它。

不啰嗦,接下来跟我一起看一眼 equals 

 String的 equals

  源码:

    public boolean equals(Object anObject) {
        if (this == anObject) {
            return true;
        }
        if (anObject instanceof String) {
            String anotherString = (String)anObject;
            int n = value.length;
            if (n == anotherString.value.length) {
                char v1[] = value;
                char v2[] = anotherString.value;
                int i = 0;
                while (n-- != 0) {
                    if (v1[i] != v2[i])
                        return false;
                    i++;
                }
                return true;
            }
        }
        return false;
    }

分析: 

part1

part2

part3

 

ps: String里面的value 就是char[ ]数组,这个应该大家都该知道。

 

对象的equals

源码:

    public boolean equals(Object obj) {
        return (this == obj);
    }

 

分析:

对象的equals比较非常直接,就是引用的内存地址的比较,不一样就false。

所以这也是为啥有些时候需要重写equals方法的原因,写成符合业务的比较逻辑

 

 

 看源码,我的个人观点是,不求完全看懂,但是要看得细。

所谓看细节,不是说每行都看那就叫看得细,而是要持有敏感度,能抓住关键点,那才叫看得细。

这也是为啥有的大佬,看源码的时候速度快还又能找到问题所在点。

多看看源码,对于刚出来的小伙,只有好处没有坏处。

相关文章:

  • MySql 报错 表被锁 处理
  • Springboot Filter 多过滤器的使用
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • JAVA jdk1.8 HashMap 存值流程图解
  • Java String 为什么不可变? 真的吗?
  • JAVA 将日期字符串 月份不足10月进行补0操作
  • Springboot Quartz定时任务的动态调度使用,实战详解
  • Springboot 跟着我了解下 事务 @Transactional 默认方式 Propagation.REQUIRED
  • Springboot 全局日期格式化,只需要几行小代码
  • springboot 上传文件设置文件大小限制
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • Springboot 自定义注解+AOP简单实例介绍
  • Java 将Map的toString格式字符串转为 Map
  • Java 细品 重写equals方法 和 hashcode 方法
  • Java 对象的克隆Clone和必须了解的浅拷贝与深拷贝
  • 【RocksDB】TransactionDB源码分析
  • 08.Android之View事件问题
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS6 编译安装 redis-3.2.3
  • ES6--对象的扩展
  • gcc介绍及安装
  • JavaScript异步流程控制的前世今生
  • java取消线程实例
  • uni-app项目数字滚动
  • yii2权限控制rbac之rule详细讲解
  • 从重复到重用
  • 基于遗传算法的优化问题求解
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端性能优化——回流与重绘
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 白色的风信子
  • 积累各种好的链接
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (超详细)语音信号处理之特征提取
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二十四)Flask之flask-session组件
  • (十三)Flask之特殊装饰器详解
  • (五)关系数据库标准语言SQL
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .Net Redis的秒杀Dome和异步执行
  • .net 反编译_.net反编译的相关问题
  • .NET/C# 的字符串暂存池
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .Net中wcf服务生成及调用
  • .net中我喜欢的两种验证码
  • @JoinTable会自动删除关联表的数据
  • [<死锁专题>]
  • [BUG] Authentication Error