Object o1 = true ? new Integer(1) : new Double(2.0);
向精度高的做类型提升,o1的值为1.0
通过查看字节码可知:
0: new #16 // class java/lang/Integer
3: dup
4: iconst_1
5: invokespecial #18 // Method java/lang/Integer."<init>":(I)V
8: invokevirtual #21 // Method java/lang/Integer.intValue:()I
11: i2d
12: invokestatic #25 // Method java/lang/Double.valueOf:(D)Ljava/lang/Double;
15: astore_1
16: return
new Integer(1)先执行了intValue转成int值,在int转double,再执行Double.valueOf()转成了Double包装类型。