Java中的基本数据类型转换(自动、强制、提升)
轉(zhuǎn)載自?Java中的基本數(shù)據(jù)類型轉(zhuǎn)換(自動(dòng)、強(qiáng)制、提升)
?
說基本數(shù)據(jù)類型轉(zhuǎn)換之前,先了解下 Java 中的 8 種基本數(shù)據(jù)類型,以及它們的占內(nèi)存的容量大小和表示的范圍,如下圖所示。
重新溫故了下原始數(shù)據(jù)類型,現(xiàn)在來解釋下它們之間的轉(zhuǎn)換關(guān)系。
自動(dòng)類型轉(zhuǎn)換
自動(dòng)類型轉(zhuǎn)換是指:數(shù)字表示范圍小的數(shù)據(jù)類型可以自動(dòng)轉(zhuǎn)換成范圍大的數(shù)據(jù)類型。
如:
long l = 100;int i = 200; long ll = i;具體自動(dòng)轉(zhuǎn)換如如下圖所示。
實(shí)線表示自動(dòng)轉(zhuǎn)換時(shí)不會(huì)造成數(shù)據(jù)丟失,虛線則可能會(huì)出現(xiàn)數(shù)據(jù)丟失問題。
自動(dòng)轉(zhuǎn)換也要小心數(shù)據(jù)溢出問題,看下面的例子。
int count = 100000000; int price = 1999; long totalPrice = count * price;編譯沒任何問題,但結(jié)果卻輸出的是負(fù)數(shù),這是因?yàn)閮蓚€(gè) int 相乘得到的結(jié)果是 int, 相乘的結(jié)果超出了 int 的代表范圍。這種情況,一般把第一個(gè)數(shù)據(jù)轉(zhuǎn)換成范圍大的數(shù)據(jù)類型再和其他的數(shù)據(jù)進(jìn)行運(yùn)算。
int count = 100000000; int price = 1999; long totalPrice = (long) count * price;另外,向下轉(zhuǎn)換時(shí)可以直接將 int 常量字面量賦值給 byte、short、char 等數(shù)據(jù)類型,而不需要強(qiáng)制轉(zhuǎn)換,只要該常量值不超過該類型的表示范圍都能自動(dòng)轉(zhuǎn)換。
強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換我們?cè)偾宄贿^了,即強(qiáng)制顯示的把一個(gè)數(shù)據(jù)類型轉(zhuǎn)換為另外一種數(shù)據(jù)類型。
如:
short s = 199; int i = s;// 199double d = 10.24; long ll = (long) d;// 10以上的轉(zhuǎn)換結(jié)果都在我們的預(yù)期之內(nèi),屬于正常的轉(zhuǎn)換和丟失精度的情況,下面的例子就一樣屬于數(shù)據(jù)溢出的情況。
int ii = 300; byte b = (byte)ii;300 已經(jīng)超出了 byte 類型表示的范圍,所以會(huì)轉(zhuǎn)換成一個(gè)毫無意義的數(shù)字。
類型提升
所謂類型提升就是指在多種不同數(shù)據(jù)類型的表達(dá)式中,類型會(huì)自動(dòng)向范圍表示大的值的數(shù)據(jù)類型提升。
把上面的溢出的例子再改下。
long count = 100000000; int price = 1999; long totalPrice = price * count;price 為 int 型,count 為 long 型,運(yùn)算結(jié)果為 long 型,運(yùn)算結(jié)果正常,沒有出現(xiàn)溢出的情況。
?
?
總結(jié)
以上是生活随笔為你收集整理的Java中的基本数据类型转换(自动、强制、提升)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 八大洋是哪八大洋 八大洋的相关知识
- 下一篇: 分布式作业 Elastic-Job 快速