繁体   English   中英

为什么空指针异常不提供null的表达式?

[英]why null pointer exception does not provide the expression that is null?

除非有代码行,否则throw new NullPointerException(); 当操作一个结果为null的表达式时,通常会出现空指针。 所以,我的问题是,为什么空指针的消息不包含返回null的表达式?

当您尝试取消引用null ,会发生NullPointerException ,而不是在您创建或拥有null时。 堆栈跟踪包含该行,并且它就像它获得的那样好,并且JVM并不真正知道null来自何处,它在尝试尽可能快地通过字节码流失时不会跟踪这些事情。


如果您在调试此类情况时遇到问题,可以随时拆分表达式并使用临时变量:

String tmp = myObj.getSomething();
String result = tmp.substring(1);

如果上面的第一行抛出NullPointerException(堆栈跟踪显示它来自该行,而不是来自myObj.getSomething() ),你知道myObj为null。 如果第二行抛出NullPointerException,则知道tmp为null,即myObj.getSomething()返回null。 如果你注意到myObj.getSomething()在正常情况下实际上可能返回null,那么你可以在myObj.getSomething()添加if (tmp != null) { ... } else { ... }类代码。

我不确定,但我想原因是如果JVM必须能够报告抛出异常的精确表达式,可能会出现重大性能问题。

至少,它需要更改类文件格式以包括(真正)细粒度的源代码位置信息......比行号更精细。

无论如何,这个问题没有实际意义......因为它没有。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM