public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
意外輸出我得到1.0作爲輸出,首先在上述else語句是不可到達的,但它的汽車類型如何鑄造。混亂而正從java程序
public static void main(String[] args) {
Object o=true?new Integer(1):new Double(1.0);
System.out.println(o);
}
意外輸出我得到1.0作爲輸出,首先在上述else語句是不可到達的,但它的汽車類型如何鑄造。混亂而正從java程序
JLS規定
加寬原語轉換(§5.1.2)被施加到轉換的任一個或由下面的規則中指定的兩個 操作數: •如果一個操作數的類型的雙,所述其他轉換爲雙倍。
是在表達
true? Integer(1) : Double(1.0)
因爲這裏的操作之一是雙倍返還型也增加一倍
爲了使這裏的事情複雜化,後者被認爲是死代碼。因此,即使第三個操作數表達式永遠不能執行,轉換爲Double仍然會發生。如果他說過 '是真的?整數(1):Double(2.0)' 輸出仍然是1.0,Object將被視爲Double。 – TechTrip
http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html#jls-5.6
的關鍵字是「數值提升」:
數字優惠用於數字 操作者的操作數轉換成一個共同的類型,以便可以執行的操作。 兩種數字提升是一元數字提升(§5.6.1) 和二進制數字提升(§5.6.2)。
sᴜʀᴇsʜᴀᴛᴛᴀ已經給了你一個鏈接解釋你的具體的例子。
您從這裏嗎???[奇怪-Java的行爲複製 - 它是一個錯誤](http://stackoverflow.com/questions/19293575/strange-java-behaviour-is-it-a-bug),如果沒有抱歉。看這裏。 –
是的,抱歉@SURESH ATTA,那個答案是無法理解的。 – user2826111
你在這個答案中有什麼不明白的地方? –