Код: Выделить всё
var i = true ? Integer.valueOf(1) : "ABC"; //this works - why ?
System.out.println(i instanceof Object); //prints true
System.out.println(i instanceof Integer); //prints true
System.out.println(i instanceof String); //prints false
System.out.println(i); //prints 1
i = "haha"; //this compiles ok. How can we assign "haha" to Integer ??
System.out.println(i); //prints "haha"
Почему компилятор допускает это и что здесь подразумевается для i?
Обратите внимание, если я скажу следующее:
Код: Выделить всё
var i2 = 10;
i2 = "lol";
Дополнение:
Код: Выделить всё
var x = new Random().nextBoolean() ? 33 : new File("/tmp/");
System.out.println(x.getClass());
x = 5;
x = "wtf"; //this also is OK!
Но даже когда он печатает java.io.File, оператор x = 5 всегда работает и компилируется нормально. Более того, x = "wtf" тоже компилируется нормально.
Подробнее здесь: https://stackoverflow.com/questions/791 ... -confusion
Мобильная версия