
三目运算符中的坑不容易发现,看一段代码
1 2 3 4 5 6
|
public class Test { public static void main(String[] args) { Long test = null; Long a = 2 > 1 ? test : 0L; } }
|
Exception in thread “main” java.lang.NullPointerException
at Test.main(Test.java:11)
报的NPE,这个地方报NPE,着实想不到,只能看下字节码
1
|
javap -v Test.class > output.txt
|
结果是这样的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=2, locals=3, args_size=1 0: aconst_null 1: astore_1 2: aload_1 3: invokevirtual #2 // Method java/lang/Long.longValue:()J 6: invokestatic #3 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long; 9: astore_2 10: return LineNumberTable: line 10: 0 line 11: 2 line 12: 10 LocalVariableTable: Start Length Slot Name Signature 0 11 0 args [Ljava/lang/String; 2 9 1 test Ljava/lang/Long; 10 1 2 a Ljava/lang/Long;
|
经过自动的拆箱和装箱,至于为何要经过这么一步处理 @Sun @Oracle 😂
近期评论