java null equals NullPointerException

发布于 2022-09-11 22:39:09 字数 968 浏览 27 评论 0

问题描述

String a = null;
boolean flag3 = a.equals("a");

运行后会报错

Exception in thread "main" java.lang.NullPointerException

问题出现的环境背景及自己尝试过哪些方法

在equals源码中,只看到

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;

疑问1:
在equals中,并没有抛出异常,那么这个异常是在哪里抛出的呢?这个可能涉及到底层jvm相关的知识了,但是我目前完全不知道该怎么去了解这块。

问题2:
在dubugger过程中,打断点运行时候发现,在运行到当前语句之前,equals有被其他地方调用多次,
如下图
clipboard.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

离不开的别离 2022-09-18 22:39:09

java SE 13 specification

15.11. Field Access Expressions

FieldAccess:
    Primary . Identifier
    super . Identifier
    TypeName . super . Identifier

15.11.1. Field Access Using a Primary
At run time, the result of the field access expression is computed as follows: (assuming that the program is correct with respect to definite assignment analysis, that is, every blank final variable is definitely assigned before access)
......

  • If the field is not static:

    • ......
    • If the value of the Primary is null, then a NullPointerException is thrown.

这里进不了 equals 函数。a 求值为 null 之后,直接就抛异常了。

忆梦 2022-09-18 22:39:09

String a = null;
boolean flag3 = a.equals("a");

a是 null, null 是没有 equals 方法的, 所以 jvm 直接报 NullPointerException了,这和equals方法没有任何关系。

冰雪梦之恋 2022-09-18 22:39:09

equals 不属于基本的操作方法,比如==,他是Object类的,也就是必须得有一个类对象才可以调用。
你相当于写了 null.equals(); ,IDE的代码提示都会给你提示出错的。
NullPointerException异常,是jre运行时抛出来的,堆栈运行时,需要根据你的对象去堆里面找对象,没找到。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文