啊哈哈哈哈哈~剛打完三國殺,好爽,於是有看了一下視頻。
有關於類型的轉換,有兩種:自動和硬肛(強制)。
1.自動類型轉換
容量小的數據類型可以自動轉爲容量大的數據類型。
e.g int i = 3;
double d = i;
float f = i;
double d2 = f; //直接換 不用什麼硬肛的姿勢。
可以直接將int常量直接賦值給byte,short,char等類型變量,而不需要強制類型轉只要 不超出其表數範圍。
e.g byte(-128~~127)
char(0~~65535)
int i = 200;
byte c = i;
錯!!!!!
int i = 126;
byte c = i;
對!!!!!
byte b = 123;
byte b2 = 300;// 錯!!!!!
char c = -3;//錯!!!!!負數!超範圍了
char c2 = 'a';
int i = c2;//(直接)
long do1 = 123213;//(直接)
float f = do1;//可能丟失精度
容量大小是表示範圍的大小,與字節無關
2.硬肛類型轉換,這麼羞羞的姿勢點,我還是在例子中說明把。
e.g int i2 = 100;
char c3 = (char)i2;
System.out.println(c3);
//輸出結果爲字符d
可是當超過強制轉換一個類型的表述範圍時,轉化成完全不同的無意義的值
e.g int i2 = -100;
char c3 = (char)i2;
System.out.println(c3);
//輸出結果爲字符不認識的
e.g //表達式中類型提升問題
int a = 3;
long b = 4;
int c = (int)(a+b);//做所有的二元運算符(+-*/%)都會有類型提升的問題 比如如果寫成 int c = a+b;會報錯損失精度。
float f = (float)(a+b);
常見錯誤:
int money = 10億;//太多0 勞資就只寫中文了
int years = 20;
int all = money * years;
System.out.println(all);//負,因爲超出範圍了
面對這種情況,就要用類型提升來補鍋了。
比如: long all = (long)money * years;
注意,這裏提升的只有一個int money整型,如果 (long)(money*years)
同樣爲負,因爲兩個int相乘的結果早已超範圍了。
所以!!!遇到多數字運算時使結果溢出的情況時,只需提升其中一個元素即刻。
e.g long time = 70L * 60 * 24 * 365 * 70;
System.out.println(time);
嗯好累,我又去玩了