一:值是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.源码.
publicfinalclassObjects
{

privateObjects()
{

thrownew
 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)

     */

publicstaticbooleanequals(Object a, Object b)
{

return
 (a == b) || (a != 
null
 && a.equals(b));

    }

...

}

2.说明
首先,进行了对象地址的判断,如果是真,则不再继续判断。
如果不相等,后面的表达式的意思是,先判断a不为空,然后根据上面的知识点,就不会再出现空指针。
所以,如果都是null,在第一个判断上就为true了。如果不为空,地址不同,就重要的是判断a.equals(b)。
来源:cnblogs.com/juncaoit
PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。
 关注公众号:Java后端编程,回复下面关键字 
要Java学习完整路线,回复  路线 
缺Java入门视频,回复 视频 
要Java面试经验,回复  面试 
缺Java项目,回复: 项目 
进Java粉丝群: 加群 
PS:如果觉得我的分享不错,欢迎大家随手点赞、在看。
(完)
加我"微信获取一份 最新Java面试题资料
请备注:666不然不通过~
最近好文
最近面试BAT,整理一份面试资料Java面试BAT通关手册,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。
获取方式:关注公众号并回复 java 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡
继续阅读
阅读原文