java null equals NullPointerException
问题描述
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有被其他地方调用多次,
如下图
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
java SE 13 specification
这里进不了 equals 函数。
a
求值为null
之后,直接就抛异常了。a
是 null, null 是没有 equals 方法的, 所以 jvm 直接报 NullPointerException了,这和equals方法没有任何关系。equals 不属于基本的操作方法,比如==,他是Object类的,也就是必须得有一个类对象才可以调用。
你相当于写了 null.equals(); ,IDE的代码提示都会给你提示出错的。
NullPointerException异常,是jre运行时抛出来的,堆栈运行时,需要根据你的对象去堆里面找对象,没找到。