Java筆試題之自動類型轉換細節題

Java筆試題之自動類型轉換細節題

一 、以下代碼輸出結果是【中國東北某著名軟件公司 筆試題】

Java筆試題之自動類型轉換細節題

A、編譯錯誤 B、 10.9 C、9 D、 以上答案都不對


如果你認為很簡單,選擇了C,那麼即恰巧中了陷阱。

三目運算表達式結構:

ConditionalOrExpression ? Expression : ConditionalExpression

Java會根據運算符的經度類型進行自動類型轉換,由於前面一個是10.9(double類型),因此後面的9也會自動變成9.0.因此選擇D項。

自動類型轉換的規則:

  • 參與運算的數據類型不同,先轉換成同一類型,然後進行運算。

  • 轉換按數據長度增加的方向進行,以保證精度不降低。例如int型和long型運算時,先把int量轉成long型後再進行運算。

  • 所有的浮點運算都是以雙精度進行的,即使僅含float單精度量運算的表達式,也要先轉換成double型,再作運算。

  • char型和short型參與運算時,必須先轉換成int型。

  • 在賦值運算中,賦值號兩邊的數據類型不同時,需要把右邊表達式的類型將轉換為左邊變量的類型。如果右邊表達式的數據類型長度比左邊長時,將丟失一部分數據,這樣會降低精度

Java筆試題之自動類型轉換細節題


二、以下代碼輸出結果是()【中國著名網絡軟件公司 筆試題】

Java筆試題之自動類型轉換細節題

A、120 x B、120 120 C、x 120 D、以上答案都不對


int i = 10; 這裡的i是一個變量,因此第一個輸出x被提升為int類型,字符‘x’的int值為120,所以第一個輸出的應該是120.

三目運算表達式結構:

ConditionalOrExpression ? Expression : ConditionalExpression

Java編程規範(文章最後有提供)裡面提到,

Java筆試題之自動類型轉換細節題

If one of the operands is of type T where T is byte, short, or char, and the other operand is a constant expression (§15.28) of type int whose value is representable in type T, then the type of the conditional expression is T.

大致意思如下:

如果一個操作對象是T類型(T包括byte、short或者char)另一個操作對象是int類型常量表達式,而且值可以表示為T類型,那麼輸出結果是T類型。

因為10為int常量,可以被char表示,輸出結果為char類型。


相關語言規範參見:http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.25


分享到:


相關文章: