Java中字符和int之间的转换

时间:2011-03-02 10:05:20

标签: java

您无法将int转换为char,因此这将是非法的 int i = 88; char c = i;

但是允许char c = 88;

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

3 个答案:

答案 0 :(得分:8)

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

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

byte b = 10;

也有效。

来自JLS,section 5.2

  

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

     
      
  • 缩小基元转换可能   如果变量的类型是,则使用   byte,short或char,以及的值   常量表达式是   可代表的类型   变量。
  •   
  • 缩小原语   转换后跟拳击   如果类型为,则可以使用转换   变量是:   
        
    • 字节和值   常量表达式是   在字节类型中可表示。
    •   
    • 短   和常量的值   表达式可以代表   类型短。
    •   
    • 性格和价值   常量表达式是   可以在char。中表示。
    •   
  •   

答案 1 :(得分:3)

实际上,从int转换为char是合法的,它只需要一个明确的强制转换,因为它可能会丢失数据:

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

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

char

答案 2 :(得分:0)

因为整数或小于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**]

对于任何数学运算都会发生同样的情况,例如'Divide','multiply'和其他算术运算。所以转换结果以获得所需数据类型的文字

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

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