NullPointException空指针异常

先拿一个例子来开头吧

User user = new User("123",null);
if (user.getPassword().equals("123")){
    System.out.println("登录成功");
}
System.out.println("登录失败");

结果:

 报错很简单,因为在user.getPassword获取变量时候为null

但是再看下一个写法

        User user = new User("123",null);
        if ("123".equals(user.getPassword())){
            System.out.println("登录成功");
        }
        System.out.println("登录失败");

 

 结果他没有报空指针,反而走完了,这里就不难发现 null.euqals( ) 是肯定会报空指针的,为什么呢???

首先 了解一下null,null在java里一般是来表示缺失值的,他不能赋值给基本类型,但是他赋值给引用类型instanceof又不是该类型

User user1 = null;
User user2 = new User();
if (user1 instanceof User){
    System.out.println("true1");
}
if (user2 instanceof User){
    System.out.println("true2");
}
Integer a = null;
String loop = a instanceof Integer?"true":"false";
System.out.println(loop);

 

 回归正题哈哈,equals是java.long.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;
}

 他用的是this去比较的,那么对这个this进行赋值相当于

String s = String.valueOf(null);

然后就会发现String的有参构造都是@NotNull,所以就会报空指针异常

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值