@Test
public void test1() {
Object o1 = true ? new Integer(1) : new Double(2.0);
System.out.println(o1);// 1.0
}
这句话到底发生了什么?
1、三目运算符要求 表达式2 和 表达式3 类型一致,中间的自动类型提升了,int转doub
2、int转double了,返回值是object的,又提升了,double转obj。
3、输出o1
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
输出的object转成string输出。
但是 Double重写了toString,
public static String toString(double d) {
return FloatingDecimal.toJavaFormatString(d);
}
这里又涉及到了多态,父类的对象指向子类的引用。多态调用重写的toString();即Double包装类的toString();
就一句话,真费劲,开发中没这么玩过