Пожалуйста, подумайте, что у нас есть код ниже:
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? Это очень странно для меня. Есть ли у вас пример, где это может быть полезно?
UPDATE: Вот фрагмент байт-кода, где мы можем видеть, что происходит там
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