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

就一句話,真費勁,開發中沒這麼玩過

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