Java面試 - 整型之間的轉(zhuǎn)換

程序員的快樂(lè).jpeg

目錄

  • 整型之間的轉(zhuǎn)換總結(jié):
  • 整型的值范圍
  • 整型的隱式轉(zhuǎn)換
  • 整型之間的轉(zhuǎn)換
      1. char類(lèi)型轉(zhuǎn)換為byte、short時(shí),必須使用顯式類(lèi)型轉(zhuǎn)換
      1. 當(dāng)byte,char或者short類(lèi)型(或?yàn)槿叩幕旌?參與運(yùn)算時(shí),結(jié)果為int類(lèi)型,而并非與較高的類(lèi)型相同
      1. byte轉(zhuǎn)char比較特殊,先將byte擴(kuò)展到int,然后再收縮到char,即擴(kuò)展收縮轉(zhuǎn)換

整型之間的轉(zhuǎn)換總結(jié):

  1. 如果變量的類(lèi)型是byte、short或char類(lèi)型,當(dāng)對(duì)其賦予編譯時(shí)期的常量,而該常量又沒(méi)有超過(guò)變量的取值范圍時(shí),編譯器就可以進(jìn)行隱式的收縮轉(zhuǎn)換。這種隱式的收縮轉(zhuǎn)換是安全的,因?yàn)樵撌湛s轉(zhuǎn)換只適用于變量的賦值,而不適用于方法調(diào)用語(yǔ)句,即不適用于方法調(diào)用時(shí)的參數(shù)傳遞。

  2. 注意char類(lèi)型,是一個(gè)無(wú)符號(hào)類(lèi)型。因此,char與short,char與byte之間的轉(zhuǎn)換都必須顯式地使用類(lèi)型轉(zhuǎn)換。

  3. 從byte到char的轉(zhuǎn)換為擴(kuò)展收縮轉(zhuǎn)換,該轉(zhuǎn)換比較特殊,即先將byte擴(kuò)展轉(zhuǎn)換到int,然后再收縮轉(zhuǎn)換到char。

  4. 在整型數(shù)據(jù)間的擴(kuò)展轉(zhuǎn)換中,如果操作數(shù)是char類(lèi)型(無(wú)符號(hào)類(lèi)型),則進(jìn)行無(wú)符號(hào)擴(kuò)展,擴(kuò)展位為0;如果操作數(shù)是byte、short或int(有符號(hào)類(lèi)型),則進(jìn)行有符號(hào)擴(kuò)展,擴(kuò)展位為該變量的符號(hào)位。

  5. 整型數(shù)據(jù)之間的收縮轉(zhuǎn)換,僅僅是截?cái)嗖G棄高位,不做任何其他處理。


整型的值范圍

byte:8位(一個(gè)字節(jié)8位),值范圍:-2?~ 2?, 即 -128 ~ 127

char:16位,無(wú)符號(hào)類(lèi)型,能表示的數(shù)值范圍為:0 ~ (21?-1) ,即 0 ~ 65535

// char類(lèi)型的最小值,Unicode的'\u0000'表示的是空字符,十進(jìn)制數(shù)字表示的是0
public static final char MIN_VALUE = '\u0000';
// char類(lèi)型的最大值,Unicode的'\uFFFF'轉(zhuǎn)換為十進(jìn)制數(shù)字時(shí),直接進(jìn)行無(wú)符號(hào)位擴(kuò)展到32位,即表示的數(shù)值為65535
public static final char MAX_VALUE = '\uFFFF';

short:16位,值范圍:-21? ~ (21?-1),即 -32768 ~ 32767

int:32位,值范圍:-231 ~ (231-1),即 -2147483648 ~ 2147483647

long:64位,值范圍:-2?3 ~ (2?3-1),即 -9223372036854775808 ~ 9223372036854775807


整型的隱式轉(zhuǎn)換

編譯時(shí)的整型字面常量(int類(lèi)型),如果將其賦值給比 int 類(lèi)型低的變量類(lèi)型(byte、short或char),而整型字面常量的值沒(méi)有超過(guò)該變量類(lèi)型的取值范圍,那么編譯器就可以做隱式類(lèi)型轉(zhuǎn)換。

byte b = 1; // 隱式類(lèi)型轉(zhuǎn)換,byte值范圍為:-128 ~ 127,1在此范圍內(nèi) 
char c = 1; // 隱式類(lèi)型轉(zhuǎn)換,char能表示的數(shù)值范圍為:0 ~ 65535,1在此范圍內(nèi)
short s = 1; // 隱式類(lèi)型轉(zhuǎn)換,short值范圍為:-32768 ~ 32767,1在此范圍內(nèi)

編譯錯(cuò)誤
byte b1 = 128; // 編譯錯(cuò)誤,128超過(guò)了byte值范圍,產(chǎn)生編譯錯(cuò)誤

int i = 1;
以下產(chǎn)生編譯錯(cuò)誤,i不是整型字面常量,不能做隱式轉(zhuǎn)換,必須顯式強(qiáng)轉(zhuǎn)
byte b2 = i; // 編譯錯(cuò)誤,必須顯式強(qiáng)轉(zhuǎn):byte b2 = (byte) i;
char c2 = i; // 編譯錯(cuò)誤,必須顯式強(qiáng)轉(zhuǎn):char c2 = (char) i;
short s2 = i; // 編譯錯(cuò)誤,必須顯式強(qiáng)轉(zhuǎn):short s2 = (short) i;

隱式轉(zhuǎn)換的條件總結(jié):

  • 整型字面常量
  • 整型字面常量的值沒(méi)有超過(guò)要轉(zhuǎn)類(lèi)型的取值范圍
  • 只適用對(duì)變量賦值,不適用于方法調(diào)用語(yǔ)句

整型之間的轉(zhuǎn)換

1. char類(lèi)型轉(zhuǎn)換為byte、short時(shí),必須使用顯式類(lèi)型轉(zhuǎn)換

char類(lèi)型是無(wú)符號(hào)類(lèi)型,值范圍是:0 ~ 65535,與byte(-128 ~ 127),short(-32768 ~ 32767)類(lèi)型不存在子集關(guān)系,因此char類(lèi)型與其他兩種類(lèi)型之間的轉(zhuǎn)換必須使用顯式類(lèi)型轉(zhuǎn)換。

char c = 'a';
byte b = (byte) c;
short s = (short) c;

2. 當(dāng)byte,char或者short類(lèi)型(或?yàn)槿叩幕旌?參與運(yùn)算時(shí),結(jié)果為int類(lèi)型,而并非與較高的類(lèi)型相同

byte b = 100;
char c = 50;
short s = 200;
int t1 = b + c; // byte類(lèi)型 + char類(lèi)型,結(jié)果為int類(lèi)型
int t2 = b + s; // byte類(lèi)型 + short類(lèi)型,結(jié)果為int類(lèi)型
int t3 = c + s; // char類(lèi)型 + short類(lèi)型,結(jié)果為int類(lèi)型

3. byte轉(zhuǎn)char比較特殊,先將byte擴(kuò)展到int,然后再收縮到char,即擴(kuò)展收縮轉(zhuǎn)換

<1> 擴(kuò)展轉(zhuǎn)換:

在整型數(shù)據(jù)間的擴(kuò)展轉(zhuǎn)換中,如果操作數(shù)是char類(lèi)型(無(wú)符號(hào)類(lèi)型),則進(jìn)行無(wú)符號(hào)擴(kuò)展,擴(kuò)展位為0
如果操作數(shù)是byte、short或int(有符號(hào)類(lèi)型),則進(jìn)行有符號(hào)擴(kuò)展,擴(kuò)展位為該變量的符號(hào)位。

<2> 收縮轉(zhuǎn)換:

整型數(shù)據(jù)之間的收縮轉(zhuǎn)換,僅僅是截?cái)嗖G棄高位,不做任何其他處理。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容