簡體   English   中英

為什么 System.out.print(ternary operator) 在輸出中打印浮點數?

[英]Why System.out.print(ternary operator) print float in output?

我正在通過一些 Java 面試問題 MCQ,在那里我找到了這個代碼片段,我不理解其中的輸出,盡管它只有 2 行代碼。

int a = 8;
System.out.println(((a<8)? 9.9 : (int)9));

輸出是 9.0 我不明白為什么不是 9 ?

三元運算符具有在計算值之前定義的返回類型。 因此,如果運算符可以同時返回 float 和 int,則這兩個值都將向上轉換為 float。 你的答案是這樣投射的:

(int)9 -> (int)9 -> (float)9.

其他情況:如果你加上 float 和 int,你會得到 float

int a = 2;
float b = 4.3f;
float c = a + b;

三元運算符的返回類型是根據相當復雜的規則確定的: Java 語言規范 具體來說,就您而言:

否則,將二進制數值提升(第 5.6.2 節)應用於操作數類型,條件表達式的類型是第二個和第三個操作數的提升類型。

因此,在您的情況下,您會得到雙倍的返回類型。

因為你沒有鑄造所有的。 您只是將第二個結果轉換為 int。

但是不要忘記第一個結果是 float 所以所有的結構都必須是相同的類型。 您需要將它們全部轉換為 int 或 float 等相同類型。

int a = 8;
System.out.println(""+ (int)( (a<8)? 9.9 :  9));

輸出 :

9

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM