[英]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唯一的內置無符號類型),因此即使short
和byte
變量也可能需要轉換為char
因為它們可能為負數。 short
和char
均為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.