Java基本資料型別轉換那些事

2021-07-30 17:54:03 字數 1973 閱讀 5307

1.promotecast

promote:如果是負數,前面所有空位補1. 如果是正數,前面所有空位補0。

cast:擷取低位的。

2.

int i = 0xffffffff;     //正常編譯執行

system.out.println(i); //0xffffffff預設為int型,若達到int型最高位,直接把16進製制當做二進位制,最高位為符號位

short s = 0xfffffff0;//可以正常編譯執行,0xfffffff0預設為int型,雖然二進位制占用32位,但是沒有超出short表示範圍。

system.out.println(s);

//int i = 1;

//! short s = i;//但是這個編譯會出錯,因為i是變數,需要cast才行

long l = 0xffffffffl; //字面值型別很重要,若不加l預設為int,則賦值給l的是-1。所以,如果想要表示的數超出了int型,則一定要加上l

system.out.println(l);

輸出:-1

-164294967295

3.byte,char,short

這三種資料型別在進行任何數**算或者位運算時,都會先被promote為int型再進行運算。

4 .a = a+1 和 a+=1

short a = 1

;//!a=a+1

; 編譯不能通過,因為進行a+1運算時,a首先被提公升為int型,然後加1運算,得到的結果也是int型。

//所以需要強制轉化才能賦給short型的a,應該這樣寫: a = (short)(a+1);

a+=1

; //可以正常編譯執行。因為+=號會自動將結果強制轉換為short型。

5.過載時資料型別的promote

(1)過載函式的引數只有乙個時

public

class test

public

static

void

f(long l)

public

static

void

main(string args)

}//output:

long

long

執行f(1)時,1是乙個int型,傳給f後先找是否有引數為int型的f函式,如果沒有,則找比int的資料範圍更大的資料型別,然後選擇其中的最小的(這裡比int資料範圍更大的且最小的資料型別就是long)。

但是,需要注意一下char

[1]char是無符號16位的,short是有符號16位。因此在main函式中向f傳入char型,且找不到定義的引數為char型的函式f時,接下來會去找是否有int型引數的函式,而不是short。

[2]有符號型byte和short不會被提公升為無符號型char型。也就是說,如果在main中向f傳入的是byte或者short型別,那麼不應該考慮定義的引數為char型的f。

(2)過載函式的引數有多個時

public

class testclass

public

static

void

f(int i2, int i3)

public

static

void

main(string args)

}//output:

first

JAVA基本資料型別轉換

boolean型別不可以轉換成其他的資料型別 整形 字元型 浮點型的資料在混合運算中相互轉換,轉換時遵循如下規則 容量小的型別自動轉換成容量大的資料型別 資料型別按容量大小排序如下 byte,short,char int long float double 要注意的是byte,short,char之...

Java基本資料型別轉換

1 boolean型別不可以轉換成其他的資料型別,其他型別也不能轉換為boolean型別。2 整形,字元型,浮點型的資料在混合運算中可以互相轉換。容量小的型別自動轉換成容量大的資料型別。資料型別按容量大小排序為 byte,short,char int long float double byte,s...

JAVA基本資料型別轉換

boolean不能轉換成其他的資料型別 容量小的自動轉換成容量大的,而容量大的轉換成容量小的時候就要加上強制轉換符,可能造成精度降低或者溢位。容量自大到小排列順序 byte,short,char int long float double byte,short,char之間不會相互轉換,計算時候首先...