簡體   English   中英

數字促銷是否使用縮小轉換?

[英]Does numeric promotion use narrowing conversion?

我一直認為數字轉換使用擴展轉換,並且只需遵循一些優先級即可,例如:

如果操作數是 double 類型,則所有內容都將轉換為 double。 下一個優先級是 float,然后是 long,然后是 int。

但后來我偶然發現了這個新的JLS ,上面寫着

如果任何表達式的類型為 int 且不是常量表達式(第 15.29 節),則提升的類型為 int,並且其他非 int 類型的表達式經歷擴展原始轉換為 int。

否則,如果任何表達式是 short 類型,並且每個其他表達式要么是 short 類型,要么是 byte 類型,要么是 int 類型的常量表達式,其值可以用 short 類型表示,那么提升的類型是 short,並且byte 表達式經過加寬原始轉換為 short,而 int 表達式經過縮小原始轉換為 short。

否則,如果任何表達式是 byte 類型,並且每個其他表達式要么是 byte 類型,要么是 int 類型的常量表達式,其值可以在 byte 類型中表示,那么提升的類型是 byte,並且 int 表達式進行縮小原始轉換為字節。

否則,如果任何表達式是 char 類型,並且每個其他表達式要么是 char 類型,要么是 int 類型的常量表達式,其值可以在 char 類型中表示,那么提升的類型是 char,並且 int 表達式進行縮小原始轉換為 char。

否則,提升的類型為 int,並且所有非 int 類型的表達式都經過擴展原始轉換為 int。

你能告訴我這是什么意思嗎? 數值提升何時使用縮小轉換? 如果這是一個塗料問題,我很抱歉,但我不會說英語,這對我來說太英語了,我無法理解。

如果兩個值具有不同的數據類型,Java 會自動將其中一個值提升為兩種數據類型中較大的一個。

如果其中一個值是整數而另一個是浮點值,Java 會自動將整數值提升為浮點值的數據類型。

較小的數據類型,即 byte、short 和 char,在與 Java 二進制算術運算符一起使用時首先被提升為 int,即使兩個操作數都不是 int。

在發生所有提升並且操作數具有相同的數據類型之后,結果值將具有與其提升的操作數相同的數據類型。

根據您發布的內容,縮小轉換只會影響 int 類型的數值表達式,這些表達式既是常量又可以在較窄的類型中表示。

暫無
暫無

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

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