`
m17197092417
  • 浏览: 22571 次
文章分类
社区版块
存档分类
最新评论

m17197092417

 
阅读更多

这片文章中会总结一下与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技术基础PPT-配合《M2M通信》** M2M,全称为Machine-to-Machine,是物联网(IoT)领域中的一个重要概念,它代表了设备与设备之间的通信,允许智能系统自动进行数据交换和处理,无需人工干预。在本PPT和配套的...

    富士施乐M118z打印机驱动

    富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z打印机驱动富士施乐M118z...

    喜马拉雅x2m文件解密工具x2m转m4a

    "喜马拉雅x2m文件解密工具x2m转m4a"这个标题涉及到两个主要的知识点:一是对特定音频格式的理解,二是音频文件的转换。 首先,让我们来了解一下“x2m”文件格式。x2m是喜马拉雅平台特有的音频格式,主要用于存储和...

    打印机驱动 施乐M235DW M235Z驱动

    打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 施乐M235DW M235Z驱动打印机驱动 ...

    MOEAD-M2M_Matlab.rar_MOEA/D_MOEAD_cell3t2_m2m_moead-m2m

    matlab实现moead-M2M算法,基于角度的多目标算法

    代码 强插型有优先级的M_M_m排队系统仿真代码

    代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队系统仿真代码代码 强插型有优先级的M_M_m排队...

    Matlab产生m序列的函数-m_sequence1.m

    Matlab产生m序列的函数-m_sequence1.m 一个产生m序列的函数,希望大家喜欢 function [mseqmatrix]= m_sequence1; n = length; N = 2^n-1; register = [zeros 1];%定义移位寄存器的初始状态 mseqmatrix= ...

    DAM3000M(阿尔泰驱动)

    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

    本文将深入探讨“x2m”格式及其转换至“m4a”格式的过程,以及如何使用提供的“ximalaya.exe”工具来实现这一目标。 首先,我们要理解这两种音频格式的特性。X2M是一种由喜马拉雅FM平台使用的专有音频格式,它可能...

    M2M4算法。

    SNR估计M2M4 M2M4算法。

    KT0656M接收KT0646M发射.rar

    《KT0656M与KT0646M无线发射接收系统详解》 在现代电子通信技术中,无线发射接收系统扮演着至关重要的角色。本文将深入探讨标题中的"KT0656M接收KT0646M发射"这一主题,结合描述中的“数据手册”,我们将详细解析这...

    PCI_Express_M.2_Specification_Rev1.1

    "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满足条件,且可使m2+n2的值最大。

    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满足...

    M/M/1单服务台排队系统

    在IT领域,尤其是在系统模拟和运筹学中,"M/M/1单服务台排队系统"是一个经典模型,用于分析和理解服务系统中的等待时间、效率和服务质量等问题。这个模型由三部分组成:M表示顾客到达的过程是泊松过程,M也代表服务...

    M7450,M7450F,M7400,M7650,系列固件升级程序.zip

    联想打印机M7450,M7450F,7400,M7650,系列固件升级程序,解决打印机在Windows8 Windows8.1 Windows10系统下,无法识别打印机安装驱动并正常使用的问题,本人亲测没有问题,欢迎下载,如有问题,可留言远程帮助升级。

    Control-M 作业配置手册

    Control-M 是一款强大的工作流程自动化解决方案,用于管理企业的批处理作业。它允许用户定义、调度、监控和控制各种IT任务,确保业务流程的顺畅运行。本手册将详细讲解如何配置和定义Control-M中的作业,帮助用户...

    MM.rar_M M 频偏_MM频偏_M估计_频偏估计 MM_频偏估计算法

    使用M&M算法进行载波频偏估计,主要应用于dvb-s2中

    打印机驱动 HP_LJM153-M154_U_Basicx64_44.3.2218

    打印机驱动 HP_LJM153-M154_U_Basicx64_44.3.2218打印机驱动 HP_LJM153-M154_U_Basicx64_44.3.2218打印机驱动 HP_LJM153-M154_U_Basicx64_44.3.2218打印机驱动 HP_LJM153-M154_U_Basicx64_44.3.2218打印机驱动 HP_...

    小波的代码-M_shift1.m

    小波的代码-M_shift1.m zhengxing.m sub_m.m rank_c.m mulscale_edge.m mul_c.m max_c.m ...

    M2M解决方案的设计与实现

    本文详细讨论了基于M2M网关的解决方案、M2M网关的设计与实现、如何通 过M2M网关来实现M2M业务逻辑。具体的说,本文的工作主要集中在以下几个方 面。在需求分析方面:从M2M业务入手,分析了M2M业务流程。提出使用M2M...

Global site tag (gtag.js) - Google Analytics