簡體   English   中英

在Java中輸入類型轉換和自動類型提升

[英]Type casting and automatic type promotion in Java

讓我們考慮Java中的一些簡單表達式。

byte var=0;

var=(byte)(var+1);

在上面的陳述中,由於自動類型提升,顯然需要類型轉換。

表達式(var + 1)的計算自動提升為int,因此必須顯式地轉換為byte以將其結果賦給賦值右側的字節變量,即var


現在,讓我們考慮Java中的以下語句。

var++;

這有點等同於前面的語句,雖然它可以在沒有強制轉換的情況下工作但是應該需要一個強制轉換 為什么?


即使以下聲明也不需要演員表。 為什么?

byte x=var++;

Java語言規范,§15.14.2

后綴增量表達式的類型是變量的類型。

另一方面,對於表達式var + 1 ,以下規則適用( JLS,§5.6.2 ):

當運算符將二進制數字提升應用於一對操作數時,每個操作數必須表示可轉換為數字類型的值,以下規則依次應用擴展轉換(第5.1.2節)來根據需要轉換操作數:

•如果任何操作數是引用類型,則執行拆箱轉換(第5.1.8節) 然后:
•如果任一操作數的類型為double,則另一個操作數轉換為double。
•否則,如果任一操作數的類型為float,則另一個操作數轉換為float。
•否則,如果任一操作數的類型為long,則另一個操作數轉換為long。
•否則,兩個操作數都將轉換為int類型。

因此,添加兩個數字類型永遠不會給出比int更窄的結果。

暫無
暫無

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

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