原始資料型別
Java 有 8 種原始資料型別,即 boolean
,byte
,short
,char
,int
,long
,float
和 double
。 (所有其他型別都是引用型別。這包括所有陣列型別,以及在 Java 語言中具有特殊意義的內建物件型別/類;例如 String
,Class
和 Throwable
及其子類。)
原始型別的所有操作(加法,減法,乘法等)的結果至少是 int
,因此將 short
新增到 short
會產生 int
,就像將 byte
新增到 byte
,或者將 char
新增到 byte
,或者將 char
新增到 char
。如果要將其結果分配回相同型別的值,則必須強制轉換它。例如
byte a = 1;
byte b = 2;
byte c = (byte) (a + b);
不轉換操作將導致編譯錯誤。
編譯器使用 Java 虛擬機器指令對
byte
和short
型別的文字值進行編碼,這些指令在編譯時或執行時將這些值簽名擴充套件為int
型別的值。boolean
和char
型別的文字值的載入使用在編譯時或執行時將文字零擴充套件為int
型別的指令進行編碼。 [..]。因此,對實際型別boolean
,byte
,char
和short
的值的大多數操作都是通過對計算型別int
的值進行操作的指令正確執行的。
其背後的原因也在該部分中說明:
鑑於 Java 虛擬機器的單位元組操作碼大小,將編碼型別編碼到操作碼中會對其指令集的設計造成壓力。如果每個型別化指令都支援所有 Java 虛擬機器的執行時資料型別,則會有更多的指令,而不是在
byte
中表示的。 […]單獨的指令可用於根據需要在不支援和支援的資料型別之間進行轉換。