Object obj = true ? new Integer(0) : new Long(1);
System.out.println(obj.getClass() + "\nvalue = " + obj);
它的结果是:
class java.lang.Long
value = 0
改为:
class java.lang.Integer
value = 0
有人能否澄清一下为什么Java中会有这样的功能?这对我来说非常奇怪。您是否有任何例子可以说明这可能有用?
更新: 这里是一段字节码,我们可以看到正在发生什么。
NEW java/lang/Integer
DUP
LDC "0"
INVOKESPECIAL java/lang/Integer.<init> (Ljava/lang/String;)V
INVOKEVIRTUAL java/lang/Integer.intValue ()I
I2L
INVOKESTATIC java/lang/Long.valueOf (J)Ljava/lang/Long;
ASTORE 1
Object o = false ? new Long(0) : new Integer(1);
会返回class java.lang.Long
和1
。它不是最后一个参数的类型,而是可以通过扩展接收的类型。 - QBrute