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