課前小例
package com.zpwd.chapter1_0225;
public class TypeChange {
public static void main(String[] args) {
// 類型轉(zhuǎn)換
// 1.自動(dòng)類型轉(zhuǎn)換:兩種類型彼此兼容妒貌,目標(biāo)的取值范圍大于原型
byte num1 = 12;
short num2 = num1;
int num3 = num2;
long num4 = num3;
// 2.強(qiáng)制類型轉(zhuǎn)換:(1)兩種類型彼此兼容(不能跨大類型),但目標(biāo)類型取值范圍小于原類型(強(qiáng)轉(zhuǎn)有風(fēng)險(xiǎn)铸豁,用時(shí)需謹(jǐn)慎)
long a1 = 128;
int a2 = (int) a1;
short a3 = (short) a2;
byte a4 = (byte) a3;
System.out.println(a1);
System.out.println(a2);
System.out.println(a3);
System.out.println(a4);// 溢出灌曙、損失精度:-128
// 運(yùn)算的兼容:向范圍大的方向兼容:byte ,char,shory,int運(yùn)算時(shí),兼容方向是int节芥。
long l1 = 10;
int l2 = 20;
// int l3 = l1 + l2; //該種寫法報(bào)錯(cuò)
int l3 = (int) (l1 + l2);
byte num11 = 9;
short num12 = 10;
// short num13 = num11+num12;//報(bào)錯(cuò)在刺,因?yàn)閚um11+num12得到的類型是int
short num13 =(short) (num11+num12);
//當(dāng)double類型的變量強(qiáng)轉(zhuǎn)成int時(shí)逆害,默認(rèn)為取整
//面試題:short s1= 99;s1 = s1+2;與s1+=2 有什么區(qū)別?
// s1+2 得到的是int類型,給s1重新賦值時(shí)蚣驼,必須強(qiáng)轉(zhuǎn)成int
// 而s1+=2 不需要強(qiáng)轉(zhuǎn)
}
}
轉(zhuǎn)換類型:隱式轉(zhuǎn)換(自動(dòng)類型轉(zhuǎn)換)魄幕、強(qiáng)制類型轉(zhuǎn)換
隱式轉(zhuǎn)換:兩種類型彼此兼容,范圍小的類型轉(zhuǎn)成范圍大的類型颖杏。
byte 可以自動(dòng)轉(zhuǎn)換成 short 纯陨、int 、long
short 可以自動(dòng)轉(zhuǎn)換成 int 输玷、long
int 可以自動(dòng)轉(zhuǎn)換成 long
強(qiáng)制類型轉(zhuǎn)換:兩種類型彼此不兼容(描述并不準(zhǔn)確)队丝,范圍大的類型轉(zhuǎn)成范圍小的類型。
long 強(qiáng)制轉(zhuǎn)換成 int 欲鹏、short 、byte
注意:
- 強(qiáng)制轉(zhuǎn)換成什么類型臭墨,就要在前面加(小范圍類型)赔嚎,例如(int)、(short)胧弛、(byte)
- double類型的變量強(qiáng)制轉(zhuǎn)換成int類型的變量時(shí)尤误,默認(rèn)為取整。
- 運(yùn)算兼容類型:byte ,char,shory,int结缚,他們?cè)谧鲞\(yùn)算時(shí)损晤,全部向int類型兼容。例如:btye類型變量+char類型變量 = int類型變量红竭。
面試題
short s1= 99;
s1 = s1+2;
該種寫法是否正確,正確的寫法與s1+=2有何區(qū)別茵宪?
- 該種寫法不正確最冰,s1 是short類型,因?yàn)閎yte ,char,shory,int他們屬于兼容類型稀火,short類型變量+int(默認(rèn))2 = int暖哨,而int變量賦值給short時(shí)赡若,因?yàn)榉秶冃〈锊迹枰獜?qiáng)制轉(zhuǎn)換往枣。
正確寫法:
short s1= 99;
s1 = (short)(s1+2);
而s1+=2 是不需要強(qiáng)制轉(zhuǎn)換的。