Object o1 = true ? new Integer(1) : new Double(2.0);发生了什么

	@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();

就一句话,真费劲,开发中没这么玩过

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章