Java中字符和int之间的转换

你不能从int转换为char,所以这将是非法的int i = 88; char c = i; int i = 88; char c = i;

但是这允许char c = 88;

是不是普通数字和int字面? 怎么允许这个?

char实际上是Java中的无符号16位整数类型。

与其他整数类型一样,您可以执行从整数常量到任何整数类型的赋值转换,只要它在适当的范围内即可。 这就是为什么

 byte b = 10; 

也有效。

从JLS, 第5.2节 :

另外,如果表达式是byte,short,char或int类型的常量表达式(第15.28节):

  • 如果变量的类型是byte,short或char,则可以使用缩小的基元转换,并且常量表达式的值可以在变量的类型中表示。
  • 如果变量的类型是:则可以使用缩小的基元转换,然后进行装箱转换:
    • 字节和常量表达式的值可在类型字节中表示。
    • Short和常量表达式的值可以在short类型中表示。
    • 字符和常量表达式的值可在char类型中表示。

实际上,从int转换为char是合法的,它只需要显式转换,因为它可能会丢失数据:

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

但是,使用文字,编译器知道它是否适合char而不会丢失数据,并且仅在使用太大而无法放入char的文字时才会抱怨:

 char c = 70000; // compiler error 

因为整数或小于int的文字为byte,short和char为int 。 以这种方式理解以下内容。

码:

  byte a = 10;//compile fine byte b= 11;//compile fine byte c = a+b;//compiler error[says that result of **a+b** is **int**] 

对于“分割”,“乘法”和其他算术运算的任何数学运算都会发生同样的情况。 所以转换结果以获得所需数据类型的文字

 byte c = (byte)(a+b); 

因此,int值需要使用原始强制转换来更改char中的值的原因相同。 希望这有一定道理。