java short 转char_byte,short,char的类型转换
《java深入解析》中例子:
一、隱式類型轉(zhuǎn)換
在平時(shí)對byte char short這幾個(gè)范圍較小的類型聲明并賦值時(shí),往往忽略了一個(gè)問題。
在Java源文件當(dāng)中為變量賦值時(shí)經(jīng)常使用字面常量,這些常量在Java中是用int類型表示的。在為long類型賦值時(shí)我們會使用:
long l = 123123123L;
這是因?yàn)樵谫x值時(shí)需要一個(gè)long類型的值。那么為什么在對byte char short賦值時(shí)沒有對應(yīng)的格式,而只是簡單的用int類型的字面常量呢?
1.這還是因?yàn)镴ava編譯器造福人類地提供了隱式的類型轉(zhuǎn)換。
2.但是在變量賦值給變量或者是對方法傳入字面常量參數(shù)時(shí)就沒有這樣的福利了。畢竟方法重載時(shí)不同的參數(shù)意味著不同的重載形式,單單的字面常量就會產(chǎn)生出混淆。
public classTypeConvertTest {
public static voidmain(String[] args) {byte b = 1; //以下三種類型的變量在賦值時(shí),由int類型字面常量賦值給變量
char c = 1;//雖然類型不符,但是因?yàn)檫^于常用,Java支持隱含的類型轉(zhuǎn)換
short s = 1;int i = 1;//byte b2 = i;//而變量之間的賦值//char c2 = i;//即使不會發(fā)生數(shù)據(jù)的丟失//short s2 = i;//也不支持隱含的類型轉(zhuǎn)換//printt(1);//編譯時(shí)會產(chǎn)生錯(cuò)誤,10為int類型,而無對應(yīng)方法
printt((short) 10);
}//打印short類型的參數(shù)
public static void printt(shortvalue) {
System.out.println(value);
}//打印long類型的參數(shù)
/** public static void printt(long value) { System.out.println(value); }*/}
二、類型轉(zhuǎn)換
1.范圍較小的整數(shù)類型自動(dòng)轉(zhuǎn)化為較大整數(shù)類型,進(jìn)行有符號拓展。
byte b = 1;//0000 0001
short s = b;//0000 0000 0000 0001
b= -1;//1111 1111
s = b;//1111 1111 1111 1111
2.較大整數(shù)類型強(qiáng)制轉(zhuǎn)化為較小整數(shù)類型,丟棄高位。
3.為非int類型,以數(shù)學(xué)表達(dá)式的方式賦值時(shí),也需要類型轉(zhuǎn)換,
4.char的取值范圍非負(fù),所以與其他類型之間沒有包含關(guān)系無法自動(dòng)類型轉(zhuǎn)換。char轉(zhuǎn)換為int,long時(shí)進(jìn)行無符號拓展。
public classTypeConvertTest2 {public static voidmain(String[] args) {byte b = -23;short s = 10;char c = 'z';
b= (byte) c;//char 0~65535 byte -128~127 互相不為子集
c = (char) b;
s= (short) c;//short -32768~32767 char 0~65535 互相不為子集
c = (char) s;
b= (byte) -b;//-b 的運(yùn)算結(jié)果為int類型的變量
s = (short) (s + b);//運(yùn)算結(jié)果為int類型的變量
b = (byte) (b + 1);//運(yùn)算結(jié)果為int類型的變量
b += 1;//java支持的byte類型運(yùn)算 不需類型變換
}
}
此外byte轉(zhuǎn)char類型的過程并不是十分直觀的:
1.byte有負(fù)值而char沒有負(fù)值,因此不能直接轉(zhuǎn)換
2.byte轉(zhuǎn)換成char的過程經(jīng)過了拓展收縮轉(zhuǎn)換
#1?byte轉(zhuǎn)換為32位的int類型;
#2 截取后16位作為char的值;
public classTypeConvertTest3 {public static voidmain(String[] args) {byte b = 103; //b的補(bǔ)碼為0110 0111
int i = b;//i的補(bǔ)碼為0000 0000 0000 0000 0000 0000 0110 0111
char c = (char) b; //c的二進(jìn)制代碼為0000 0000 0110 0111
System.out.println("byte:" +b);
System.out.println("int:" +i);
System.out.println("char:" +c);
b= -103; //b的補(bǔ)碼為1001 1001
c = (char) b;//i截取十六位 1111 1111 1001 1001
i = c;//i的補(bǔ)碼為0000 0000 0000 0000 1111 1111 1001 1001
System.out.println("byte:" +b);
System.out.println("int:" +i);
System.out.println("char:" +c);
}
}
總結(jié)
以上是生活随笔為你收集整理的java short 转char_byte,short,char的类型转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL Error 1048 奇遇记
- 下一篇: 群体稳定度指标PSI