1.promote和cast
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之間不會相互轉換,計算時候首先...