当前位置: 首页 > 后端技术 > PHP

为什么不推荐大家使用a.equals(b)判断对象是否相等

时间:2023-03-30 00:50:04 PHP

一:当a.equals(b)的值为null时,a为null,抛出NullPointException。a.equals(b),a不为null,b为null,返回falseObjects.equals(a,b)比较,如果a和b都为null,则返回true,如果a和b其中一个为null,则另一个不为空,返回假。注意:不会抛出空指针异常。null.equals("abc")→抛出NullPointerException"abc".equals(null)→返回falsenull.equals(null)→抛出NullPointerExceptionObjects.equals(null,"abc")→返回falseObjects.equals("abc",null)→returnfalseObjects.equals(null,null)→returntrue两种:当值为空字符串a和b时如果都是空字符串:"",则a.equals(b),返回值为true,如果a和b之一不是空字符串,则返回false;在这种情况下,Objects.equals与情况1的行为一致。"abc".equals("")→返回false"".equals("abc")→返回false"".equals("")→返回trueObjects.equals("abc","")→返回falseObjects.equals("","abc")→返回falseObjects.equals("","")→返回true三:源码分析1.源码.publicfinalclassObjects{privateObjects(){thrownewAssertionError("Nojava.util.Objects实例给你!");}/***如果参数彼此相等则返回{@codetrue}*否则返回{@codefalse}。*因此,如果两个参数都是{@codenull},则返回{@codetrue}*如果只有一个参数是{@codenull},则返回{@code*false}。否则,通过使用*第一个参数的{@linkObject#equalsequals}方法来确定相等性。**@parama一个对象*@paramb一个要与{@codea}比较是否相等的对象*@return{@codetrue}如果参数彼此相等*否则返回{@codefalse}*@seeObject#equals(Object)*/publicstaticbooleanequals(Objecta,Objectb){返回(a==b)||(a!=null&&a.equals(b));}...}2。说明首先进行对象地址的判断。如果是真的,就不会继续判决了。空指针将再次出现。因此,如果它们都为null,则在第一次判断时为真。如果不为空,地址不同,重要的是判断a.equals(b)。