java基本資料型別與自動轉換

Mostimes1發表於2020-12-21

1、java的8種基本資料型別:

資料型別位數預設值範圍舉例說明
byte(位)80-2^7 ~ 2^7-1byte b = 10
short(短整數)160-2^15 ~ 2^15-1short s = 10
int(整數)320-2^31 ~ 2^31-1int i = 10
long(長整數)640-2^63 ~ 2^63-1long l = 10l
float(單精度)320.0-2^31 ~ 2^31-1float f = 10.0f
double(雙精度)640.0-2^63 ~ 2^63-1double d = 10.0d
char(字元)16null0 ~ 2^16-1char c = ‘c’
boolean(布林值)8falsetrue、falseboolean b = true

在Java中,資料型別的範圍與執行Java程式碼的機器無關。這是因為Java程式必須保證在所有機器上都能夠得到相同的執行結果,所以每一種資料型別的取值範圍必須固定。這就解決了軟體從一個平臺移植到另個平臺,或者在同一個平臺中的不同作業系統之間進行移植給程式設計師帶來的諸多問題。

2、基本型別的自動轉換

數值型別之間的合法轉換

在圖中有6個黑色箭頭,表示無資訊丟失的轉換;有3個紅色箭頭,表示可能有精度損失的轉換。例如,123456789是一個大整數,它所包含的位數比float型別所能夠表達的位數多當將這個整型數值轉換為float型別時,將會得到同樣大小的結果,但卻失去了一定的精度

int n = 123456789float f = n;// f 的值為 1.23456792E8

當使用兩個不同型別數值進行二元操作時(例如n+f,n是整數,f是浮點數),會自動將兩個運算元轉換為同一種型別,然後再進行計算:

  • 如果兩個運算元中有一個是 double型別的,另一個運算元就會轉換為 double型別。
  • 否則,如果其中一個運算元是float型別,另一個運算元將會轉換為float型別。
  • 否則,如果其中一個運算元是long型別,另一個運算元將會轉換為long型別。
  • 否則,兩個運算元都將被轉換為int型
  • 當兩個byte型別相加並結果超出其表示範圍
byte b1 = Byte.MAX_VALUE;
byte b2 = 1;
System.out.println(b1 + b2); //byte的範圍為:-128~127,輸出結果為128,可見其資料型別已自動轉換
  • 當兩個short型別相加並結果超出其表示範圍
short s1 = Short.MAX_VALUE;
short s2 = 1;
System.out.println(s1 + s2); //short的範圍為:-32768~32767,輸出結果為32768
  • 當兩個int型別相加並結果超出其表示範圍
int n1 = Integer.MAX_VALUE;
int n2 = 1;
System.out.println(n1 + n2); //int的範圍為:-2147483648~2147483647,輸出結果為-1

總結:byte,short自身來計算的時候有型別的提升,二元操作時自動轉為int型別;int,long,float,double自身來計算的時候沒有型別的提升,如果超出範圍了就會出現精度的損失

相關文章