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

Java 为什么null指针异常不提供null表达式?,java,exception,exception-handling,nullpointerexception,error-logging,Java,Exception,Exception Handling,Nullpointerexception,Error Logging,除非有这样的代码行,抛出新的NullPointerException()null指针。因此,我的问题是,为什么null指针的消息不包含返回null的表达式?NullPointerException发生在尝试取消引用null时,而不是仅创建或拥有一个空指针时。堆栈跟踪包含行,这是它得到的最好的结果,JVM并不真正知道null从哪里来,当它试图以尽可能快的速度搅动字节码时,它不会跟踪这些事情 如果调试此类情况时遇到困难,则始终可以拆分表达式并使用temp变量: String tmp = myObj

除非有这样的代码行,
抛出新的NullPointerException()null
的表达式进行操作时,通常会出现code>null指针。因此,我的问题是,为什么null指针的消息不包含返回null的表达式?

NullPointerException
发生在尝试取消引用
null
时,而不是仅创建或拥有一个空指针时。堆栈跟踪包含行,这是它得到的最好的结果,JVM并不真正知道
null
从哪里来,当它试图以尽可能快的速度搅动字节码时,它不会跟踪这些事情


如果调试此类情况时遇到困难,则始终可以拆分表达式并使用temp变量:

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

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

我不确定,但我认为原因是,如果JVM必须能够报告引发异常的精确表达式,那么可能会出现重大性能问题

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


无论如何,这个问题是没有意义的……”因为没有。

你能举一些例子来说明你想问什么吗?堆栈跟踪确实提供了发生异常的行号。在优化等方面,通常在运行时所知道的只是“本应作为引用的东西实际上是
null
”。在过去的任何时候,这个引用都可能是在别处计算出来的。仅仅因为java是一种编程语言,我不会停止质疑它的实现@如果你想要一个真正的答案,你问错人了。询问Java团队。OTOH,如果您实际上是在“质疑”Java(即批评它),那么SO不是一个合适的地方;请参阅常见问题解答。