java基本資料型別自動轉換規則
一、java基本資料型別
Java提供了八種基本型別,其中包括六種數字型別(四個整數型,兩個浮點型),一種字元型別和一種布林型。
整型: short, int, long, byte;
浮點型:float, double;
字元型:char;
布林型:boolean.
Java中的數值型別不存在無符號的,它們的取值範圍是固定的,不會隨著機器硬體環境或作業系統的改變而改變。
二、非賦值運算,自動轉換規則
1)布林型不參與轉換
2)規則: byte/char/short -> int -> long -> float -> double
2.1)例子:
2.2)規則具體講解public class Test { public static void main(String[] args) { short a = 1; byte b = 2; char c = 3; //三個輸出都是 class java.lang.Integer System.out.println(getType(b+a)); System.out.println(getType(b+c)); System.out.println(getType(a+c)); } public static String getType(Object o){ return o.getClass().toString(); } }
(2.2.1)如運算元之一為double,則另一個運算元先被轉化為double,再參與算術運算。
(2.2.2)如兩運算元均不為double,當運算元之一為float,則另一運算元先被轉換為float,再參與運算。
(2.2.3)如兩運算元均不為double或float,當運算元之一為long,、則另一運算元先被轉換為long,再參與算術運算。
(2.2.4)如兩運算元均不為double、float或long,則兩運算元先被轉換為int,再參與運算。
3)對比一下C語言
三、賦值運算,自動轉換規則
將小範圍型別變數轉換成大範圍型別的變數。Java會自動擴寬型別
看上面那張圖,各個基本資料型別的取值範圍都有了,如果一個取值範圍包括了另一個的,那麼賦值時,小的可以自動轉換成大的
例子: long d = 333; float e = d; //可以
short a = 1; char b = a; //不行,因為取值範圍不是包含,而是交叉
int a = 1; byte b = a; //不行,大的轉成小的,要強制型別轉換,byte b = (byte) a;
四、一些值得注意的地方
當運算子為取正運算子(+)。取負運算子(-)或按位取反運算子(~)時,如果運算元為byte、char或short,則先被轉換為int,再參與運算