一、基本數(shù)據(jù)類(lèi)型長(zhǎng)度
byte:一個(gè)字節(jié)待讳,8位预明,有符號(hào)
short:兩個(gè)字節(jié),16為撰糠,有符號(hào)
char:兩個(gè)字節(jié)酥馍,16位阅酪,無(wú)符號(hào)
int:4個(gè)字節(jié),32位术辐,有符號(hào)
float:4個(gè)字節(jié),32位辉词,有符號(hào)
long:8個(gè)字節(jié)必孤,64位瑞躺,有符號(hào)
double:8個(gè)字節(jié),64位幢哨,有符號(hào)
boolean:比較特殊,1個(gè)字節(jié)捞镰,由于其值的特殊性,不能與任何基本類(lèi)型進(jìn)行轉(zhuǎn)換
二岸售、向上類(lèi)型轉(zhuǎn)換(不考慮char類(lèi)型践樱,char類(lèi)型后面一節(jié)單獨(dú)說(shuō))
何為向上?
byte->short->int->long->float->double
只要是要轉(zhuǎn)換的類(lèi)型等級(jí)比本身類(lèi)型等級(jí)高凸丸,不需要強(qiáng)制類(lèi)型轉(zhuǎn)換拷邢,而且,內(nèi)存中所占長(zhǎng)度也會(huì)隨之提升
但是甲雅,整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)有可能會(huì)損失精度
三解孙、向下類(lèi)型轉(zhuǎn)換
向下類(lèi)型轉(zhuǎn)換坑填,均需要強(qiáng)制轉(zhuǎn)換
注意:在給基本類(lèi)型賦初值的時(shí)候抛人,整數(shù)默認(rèn)是int類(lèi)型,浮點(diǎn)數(shù)默認(rèn)是double類(lèi)型
所以脐瑰,
float a = 5.0;? ?//編譯器會(huì)報(bào)錯(cuò)妖枚,因?yàn)?.0默認(rèn)是double類(lèi)型,不經(jīng)過(guò)強(qiáng)制轉(zhuǎn)換不可以轉(zhuǎn)換為float類(lèi)型
float a = (float)5.0;? //正確
float a = 5.0f;? //正確苍在,這時(shí)候的5.0是float類(lèi)型
但是绝页,
byte a = 6;? ?//這種寫(xiě)法不會(huì)報(bào)錯(cuò)荠商,因?yàn)閷?duì)于默認(rèn)為int類(lèi)型的數(shù)據(jù),將其賦給比int類(lèi)型等級(jí)低的類(lèi)型k時(shí)(byte续誉、char莱没、short),JVM會(huì)自動(dòng)判斷該值是否超過(guò)了k類(lèi)型的取值范圍酷鸦,如果超過(guò)了饰躲,則報(bào)錯(cuò),如果沒(méi)有超過(guò)臼隔,則將該int值隱式地強(qiáng)制轉(zhuǎn)換為k類(lèi)型并賦值嘹裂。
所以;
char a = 5;? // 不會(huì)報(bào)錯(cuò)
byte a = 1000;? ?// 報(bào)錯(cuò)摔握,因?yàn)?000超過(guò)了byte所能存儲(chǔ)的最大范圍
四寄狼、char的獨(dú)特性
雖然char類(lèi)型內(nèi)部存的也是數(shù)字(ASCII碼),但是氨淌,有一點(diǎn)不同:byte泊愧、short、int宁舰、float拼卵、double都是有符號(hào)的變量類(lèi)型,char是無(wú)符號(hào)的變量類(lèi)型蛮艰,所以腋腮,即使是byte向char類(lèi)型轉(zhuǎn)換(升級(jí))、short向char類(lèi)型轉(zhuǎn)換(同級(jí))均需要強(qiáng)制轉(zhuǎn)換壤蚜,因?yàn)橛蟹?hào)和無(wú)符號(hào)的區(qū)別即寡。