[英]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.