在賦值運算或算術運算時,要求數據類型相同,否則就要進行類型轉換。
轉換的方式:
自動類型轉換(隱式)
強制類型轉換(顯示)
基本數據類型的轉換主要包含:byte、short、int、long、float、double和char,不包含boolean類型。
1.自動類型轉換
自動類型轉換(隱式類型轉換)指的是容量小的數據類型可以自動轉換為容量大的數據類型。
由低字節向高字節的轉換 byte->short->int->long->float->double, char –> int
【賦值運算中的類型轉換案例】
public static void main(String[] args) {
// 把int類型的值賦值給double數據類型(符合低字節向高字節轉換)
double num = 32;
// 把整數常量賦值給byte、 short和char類型變量(不符合低字節向高字節轉換)
byte b = 123;
short s = 123;
byte by = 1234; // 錯誤,整數常量不能操出其類型的表數范圍
}
把整數常量(int類型)賦值給byte、short和char類型變量,屬于自動類型轉換的特例,只要不超出其表數范圍即可。
算數運算中的類型自動轉換原則:
如果兩個操作數其中有一個是double類型,另一個操作就會轉換為double類型。
否則,如果其中一個操作數是float類型,另一個將會轉換為float類型。
否則,如果其中一個操作數是long類型,另一個會轉換為long類型。
否則,兩個操作數都轉換為int類型。
【算數運算中的類型轉換案例】
public static void main(String[] args) {
int num1 = 5; // int類型
double num2 = 7.34; // double類型
// 此處的num1會被提升為double類型
double sum = num1 + num2; // num1和num2的和為double類型
}
【常見面試題】
byte b1 = 11; byte b2 = 12;byte sum = b1 + b2; 和int num1 = 100; int num2 = 300; int sum = num1 + num2;哪一個正確呢?
請問說出100000L100000100000和100000100000100000的區別?
int num1 = 90000; int num2 = 90000; int total = num1 * num2; 請問total的結果是多少?
2.強制類型轉換
強制類型轉換(顯示類型轉換),主要用于顯式的轉換一個數值的類型。在有可能丟失信息的情況下進行的轉換是通過造型來完成的,但可能造成精度降低或溢出。
語法格式:目標類型 變量 =****(目標類型)源類型變量或常量
【示例】
float a = 123.23f;
byte b = (byte)a; // 注意:強轉之后有可能會丟失精度
System.out.println(b); // 輸出:123
// 注意:原類型數據被強轉后數據是不會變化。
System.out.println(a); // 輸出:123.23
使用強制類型轉換的時候,一定要明確需要強轉的數據。
ps:如需最新的免費文檔資料和教學視頻,請添加QQ群(627407545)領取。