java三元运算符的bug??

以前没有注意到问题,下面的TestCase运行报空指针异常。

 

 

public class A extends TestCase {

	public void testA() {
		Integer num = null;
		assertNull(false ? Integer.valueOf(0) : num);
		assertNull(false ? 0 : num);
	}
}
 

 

class文件分析:

 

 

false ? Integer.valueOf(0) : num

 

public void testA();
  Code:
   Stack=1, Locals=3, Args_size=1
   0:   aconst_null
   1:   astore_1
   2:   aload_1
   3:   astore_2
   4:   return

 

vs

 

false ? 0 : num

 

public void testA();
  Code:
   Stack=1, Locals=3, Args_size=1
   0:   aconst_null
   1:   astore_1
   2:   aload_1
   3:   invokevirtual   #15; //Method java/lang/Integer.intValue:()I
   6:   invokestatic    #21; //Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
   9:   astore_2
   10:  return

 

总结:由于三元运算符导致,由于num为null,转为int时会出错。这算不算JDK6的bug?

 

你可能感兴趣的:(Java)