这片文章中会总结一下与a.equals(b)的区别,然后对源码做一个小分析。
一,值是null的情况:
1.a.equals(b)
, a 是null, 抛出NullPointException异常。
2.a.equals(b)
, a不是null, b是null, 返回false
3.Objects.equals(a, b)
比较时, 若a 和 b 都是null, 则返回 true, 如果a 和 b 其中一个是null, 另一个不是null, 则返回false。注意:不会抛出空指针异常。
null.equals("abc") → 抛出 NullPointerException 异常
"abc".equals(null) → 返回 false
null.equals(null) → 抛出 NullPointerException 异常
Objects.equals(null, "abc") → 返回 false
Objects.equals("abc",null) → 返回 false
Objects.equals(null, null) → 返回 true
二,值是空字符串的情况:
1.a 和 b 如果都是空值字符串:"", 则 a.equals(b)
, 返回的值是true, 如果a和b其中有一个不是空值字符串,则返回false;
2.这种情况下 Objects.equals
与情况1 行为一致。
"abc".equals("") → 返回 false
"".equals("abc") → 返回 false
"".equals("") → 返回 true
Objects.equals("abc", "") → 返回 false
Objects.equals("","abc") → 返回 false
Objects.equals("","") → 返回 true
三,源码分析
1.源码
//java框架 www.fhadmin.cn public final classObjects{ private Objects() { throw new AssertionError("No java.util.Objects instances for you!"); } /** * Returns {@code true} if the arguments are equal to each other * and {@code false} otherwise. * Consequently, if both arguments are {@code null}, {@code true} * is returned and if exactly one argument is {@code null}, {@code * false} is returned. Otherwise, equality is determined by using * the {@link Object#equals equals} method of the first * argument. * * @param a an object * @param b an object to be compared with {@code a} for equality * @return {@code true} if the arguments are equal to each other * and {@code false} otherwise * @see Object#equals(Object) */ publicstaticboolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); }
2.说明
首先,进行了对象地址的判断,如果是真,则不再继续判断。
如果不相等,后面的表达式的意思是,先判断a不为空,然后根据上面的知识点,就不会再出现空指针。
所以,如果都是null,在第一个判断上就为true了。如果不为空,地址不同,就重要的是判断a.equals(b)。
四,“a==b”和”a.equals(b)”有什么区别?
如果 a 和 b 都是对象,则 a==b 是比较两个对象的引用,只有当 a 和 b 指向的是堆中的同一个对象才会返回 true。
而 a.equals(b) 是进行逻辑比较,当内容相同时,返回true,所以通常需要重写该方法来提供逻辑一致性的比较。
相关推荐
**M2M技术基础PPT-配合《M2M通信》** M2M,全称为Machine-to-Machine,是物联网(IoT)领域中的一个重要概念,它代表了设备与设备之间的通信,允许智能系统自动进行数据交换和处理,无需人工干预。在本PPT和配套的...
富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z...
"喜马拉雅x2m文件解密工具x2m转m4a"这个标题涉及到两个主要的知识点:一是对特定音频格式的理解,二是音频文件的转换。 首先,让我们来了解一下“x2m”文件格式。x2m是喜马拉雅平台特有的音频格式,主要用于存储和...
打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 ...
matlab实现moead-M2M算法,基于角度的多目标算法
代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队...
Matlab产生m序列的函数-m_sequence1.m 一个产生m序列的函数,希望大家喜欢 function [mseqmatrix]= m_sequence1; n = length; N = 2^n-1; register = [zeros 1];%定义移位寄存器的初始状态 mseqmatrix= ...
M2M1.0加密封包分析工具是一种专门用于解析和理解M2M(Machine-to-Machine)通信中使用的特定格式封包的软件工具。在物联网(IoT)领域,M2M通信是设备间进行数据交换的关键技术,它允许智能设备自动交换信息并执行...
2011/08/03 V6.52 去掉DAM3000MH.pdf,DAM3000MS.pdf,DAM-3000用户向导.pdf(TW)(董传阳要求) 2011/09/17 V6.53 添加VC的CNT简易程序(ZHL) 2011/11/10 V6.54 添加DAM3920模块程序(LHL) 2011/11/14 V6.55 重新打包 ...
本文将深入探讨“x2m”格式及其转换至“m4a”格式的过程,以及如何使用提供的“ximalaya.exe”工具来实现这一目标。 首先,我们要理解这两种音频格式的特性。X2M是一种由喜马拉雅FM平台使用的专有音频格式,它可能...
SNR估计M2M4 M2M4算法。
HP LaserJet MFP M129-M134 打印机驱动
《KT0656M与KT0646M无线发射接收系统详解》 在现代电子通信技术中,无线发射接收系统扮演着至关重要的角色。本文将深入探讨标题中的"KT0656M接收KT0646M发射"这一主题,结合描述中的“数据手册”,我们将详细解析这...
"PCI Express M.2 Specification Revision 1.1" PCI Express M.2 Specification Revision 1.1是一份关于M.2规范的官方文档,该文档由PCI-SIG组织发布,旨在提供M.2接口的详细规范和技术要求。 PCI-SIG组织 PCI-...
m、n为整数,且满足下列两个条件:①m、n∈{1,2,…,K}(1≤K≤109);②(n2-mn-m2)2=1。编一程序,由键盘输入K,求一组满足上述两个条件的m、n,并且使m2+n2的值最大。例如,若K=1995,则m=987,n=1597,则m、n满足...
在IT领域,尤其是在系统模拟和运筹学中,"M/M/1单服务台排队系统"是一个经典模型,用于分析和理解服务系统中的等待时间、效率和服务质量等问题。这个模型由三部分组成:M表示顾客到达的过程是泊松过程,M也代表服务...
联想打印机M7450,M7450F,7400,M7650,系列固件升级程序,解决打印机在Windows8 Windows8.1 Windows10系统下,无法识别打印机安装驱动并正常使用的问题,本人亲测没有问题,欢迎下载,如有问题,可留言远程帮助升级。
Control-M 是一款强大的工作流程自动化解决方案,用于管理企业的批处理作业。它允许用户定义、调度、监控和控制各种IT任务,确保业务流程的顺畅运行。本手册将详细讲解如何配置和定义Control-M中的作业,帮助用户...
使用M&M算法进行载波频偏估计,主要应用于dvb-s2中