簡體   English   中英

在Java中為什么不能直接將int賦給char? 但是反之亦然嗎?

[英]In java why we can't assign int to char directly??? but vice-versa is true?

public class CharAndIntTest {

    public static void main(String[] args) {
        char i='1';
        int ii=65;
        i=ii;
    }

}

一個int容量大於一個char容量,因此不能保證該轉換有效。 char值的可能范圍是0到65535,但是int可以在-2147483648到2147483647之間的任何地方。

但是,除了原始存儲大小外,還有其他注意事項。 char是無符號類型(實際上是Java唯一的內置無符號類型),因此即使shortbyte變量也可能需要轉換為char因為它們可能為負數。 shortchar均為16位,但由於short是帶符號的,因此其范圍與char范圍不同( short范圍為-32,768至32,767)。

在這里要學習的最重要的事情是, 如果可以絕對確定轉換將成功 ,則Java僅允許進行隱式轉換。 這適用於原語,對象,泛型以及幾乎所有內容。

您可以使用強制轉換:

char i='1';
int ii=65;
i=(char)ii; //explicit cast tells the compiler to force the int into a char

賦值轉換( JLS,第5.2節 )允許原始的擴展轉換,但不允許原始的縮小轉換:

當將表達式的值賦給變量時(第15.26節),將發生賦值轉換:必須將表達式的類型轉換為變量的類型。

分配上下文允許使用以下之一:

  • 身份轉換(第5.1.1節)

  • 不斷擴大的原始轉換(第5.1.2節)

  • 擴展參考轉換(第5.1.5節)

  • 裝箱轉換(第5.1.7節)(可選),然后進行擴大的參考轉換

  • 拆箱轉換(第5.1.8節)(可選),然后進行擴大的原始轉換。

因此,除非強制轉換,否則必須執行原始的縮小轉換

此外,如果該表達式是類型為byte,short,char或int的常量表達式(第15.28節):

  • 如果變量的類型為byte,short或char,並且常量表達式的值可表示為變量的類型,則可以使用縮窄的原始轉換。

因此,分配文字將起作用:

char a = 65;

char是16位數據類型,而int是32位數據類型。 因此,某些可能的int值不能在不刪除某些數據的情況下用char表示(截斷)。 編譯器會創建一條錯誤消息,以警告您因意外截斷而可能引起的問題。

如果進行適當的轉換,您仍然可以將int值分配給char

int i=500;
char c = (char)i;

您甚至可以像這樣分配非法的char值,盡管結果仍然會被截斷:

int i = 65555;
char c = (char)i; //still compiles and doesn't cause an exception, but data is lost
i = c; //i's value is 19

char是16位無符號數字,因此最多可以有65,635
int是32位帶符號的數字,因此它們的最大值為2,147,483,647

因此,如果您將一個int簽名為char ,並且所有值>= 65,635

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM