完全理解Java中的基本數據類型轉換(自動、強制、提高)

image

說基本數據類型轉換以前,先了解下 Java 中的 8 種基本數據類型,以及它們的佔內存的容量大小和表示的範圍,以下圖所示。微信

image

從新溫故了下原始數據類型,如今來解釋下它們之間的轉換關係。code

自動類型轉換

自動類型轉換是指:數字表示範圍小的數據類型能夠自動轉換成範圍大的數據類型。教程

如:內存

long l = 100;

int i = 200;
long ll = i;

具體自動轉換如以下圖所示。get

image

實線表示自動轉換時不會形成數據丟失,虛線則可能會出現數據丟失問題。編譯

自動轉換也要當心數據溢出問題,看下面的例子。數據類型

int count = 100000000;
int price = 1999;
long totalPrice = count * price;

編譯沒任何問題,但結果卻輸出的是負數,這是由於兩個 int 相乘獲得的結果是 int, 相乘的結果超出了 int 的表明範圍。這種狀況,通常把第一個數據轉換成範圍大的數據類型再和其餘的數據進行運算。im

int count = 100000000;
int price = 1999;
long totalPrice = (long) count * price;

另外,向下轉換時能夠直接將 int 常量字面量賦值給 byte、short、char 等數據類型,而不須要強制轉換,只要該常量值不超過該類型的表示範圍都能自動轉換。技術

強制類型轉換

強制類型轉換咱們再清楚不過了,即強制顯示的把一個數據類型轉換爲另一種數據類型。qq

如:

short s = 199;
int i = s;// 199

double d = 10.24;
long ll = (long) d;// 10

以上的轉換結果都在咱們的預期以內,屬於正常的轉換和丟失精度的狀況,下面的例子就同樣屬於數據溢出的狀況。

int ii = 300;
byte b = (byte)ii;

300 已經超出了 byte 類型表示的範圍,因此會轉換成一個毫無心義的數字。

類型提高

所謂類型提高就是指在多種不一樣數據類型的表達式中,類型會自動向範圍表示大的值的數據類型提高。

把上面的溢出的例子再改下。

long count = 100000000;
int price = 1999;
long totalPrice = price * count;

price 爲 int 型,count 爲 long 型,運算結果爲 long 型,運算結果正常,沒有出現溢出的狀況。

推薦:Spring Boot & Cloud 最強技術教程

掃描關注咱們的微信公衆號,乾貨天天更新。

image

相關文章
相關標籤/搜索