Java中型別強制轉換的問題
阿新 • • 發佈:2018-11-02
型別轉換
- boolean不能轉換成其他型別的資料型別
- 預設轉換
- byte,short,char——int——long——float——double
- byte,short,char相互之間不轉換,參與運算首先轉換成int型別
- 強制轉換:
- 目標型別 變數名 = (目標型別)(被轉換的資料)
損失精度例項
- double和float型別
//double和float型別
public void test1(){
double d = 12.345;
/**
* 將double的值賦值給float,需要加強制型別轉換
*/
//float f = d;//編譯不能通過
/**
* 兩種方式都可以定義float型別,但是第一種是一個double經過強制轉換的
* 第二種是直接為float型別的資料
*/
float f1 = (float) 12.345;
float f2 = 12.345F;
}
- byte型別
// byte型別
public void test2(){
byte b1 = 3, b2 = 4, b;
/**
* 對於變數而言,先提升它的型別為int,再做計算,這是將兩個整形型別轉換為
* type型別,會發生進度損失錯誤
*/
//b = b1+b2;//不能通過編譯
b = 3 + 4;//常量,先計算結果,然後檢視是否在byte的範圍內,如果在就不報錯
}
public void test3(){
/**
* byte b = 130;
* 是否有問題?若有,怎麼改正?結果是多少?
*/
/**
* byte的取值範圍:-128~127,130超出範圍,報錯
*/
//byte b = 130;//不能通過編譯
//使用強制型別轉換
byte b = (byte) 130;//輸出結果為-126
/**
* 結果分析如下:
* 計算機中資料的運算都是通過補碼進行計算的
* ①:獲取130這個資料的二進位制碼
* 00000000 00000000 00000000 10000010
* 這是130的原碼,也是反碼,還是補碼
* ②:int型別為4個位元組,byte為1個位元組,做擷取操作
* 10000010
* 這個結果為補碼
* ③:已知補碼求原碼:
* 符號位 數值位
* 補碼 1 0000010
* 反碼 1 0000001
* 原碼 1 1111110
*/
System.out.println(b);//-126
}
- char 和int
public void test4(){
/**
* 瞭解ASCII表
* 'a' 97
* 'A' 65
* '0' 48
*/
System.out.println('a');//a
System.out.println('a'+1);//97
}
- String
public void test5() {
/**
* 字串和其他資料做'+'運算,結果是字串型別
* 此時'+'不為加法運算,為字串連線符
*/
System.out.println("hello" + 'a' + 1);//helloa1
System.out.println('a' + 1 + "hello");//98hello
System.out.println("5+5=" + 5 + 5);//5+5=55
System.out.println(5 + 5 + "=5+5");//10=5+5
}