Rai*_*ipe 6 java nullpointerexception stack-trace
运行以下内容:
public class NPESample {
String value;
public static void main(String[] args) {
NPESample npeSample = null;
"foo"
.replaceAll(
"f",
npeSample.value);
}
}
Run Code Online (Sandbox Code Playgroud)
会给:
Exception in thread "main" java.lang.NullPointerException
at NPESample.main(NPESample.java:9)
Run Code Online (Sandbox Code Playgroud)
报告的行 (7) 是"foo"发生 NPE的行而不是实际的行 (10) npeSample.value。
为什么是这样?我在调试代码时感到惊讶,并被代码中报告的“错误”行号吓倒。
要重现运行这个:
cat > ./NPESample.java <<DELIM
public class NPESample {
String value;
public static void main(String[] args) {
NPESample npeSample = null;
"foo"
.replaceAll(
"f",
npeSample.value);
}
}
DELIM
javac NPESample.java
java NPESample
Run Code Online (Sandbox Code Playgroud)
输出是:
Exception in thread "main" java.lang.NullPointerException
at NPESample.main(NPESample.java:7)
Run Code Online (Sandbox Code Playgroud)
javac -version
javac 13.0.1
Run Code Online (Sandbox Code Playgroud)
java -version
openjdk version "13.0.1" 2019-10-15
OpenJDK Runtime Environment (build 13.0.1+9)
OpenJDK 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)
对我来说,这看起来不像是一个错误。具体来说,映射似乎是自由允许的,而不是一对一的,正如 SPEC 所说:
即,LineNumberTable 属性可以一起表示源文件的给定行,并且不需要与源行是一对一的。
甚至JDK-15报错行:
无法读取字段“value”,因为“npeSample”为空
在线的9。
| 归档时间: |
|
| 查看次数: |
159 次 |
| 最近记录: |