您无法将int转换为char,因此这将是非法的
int i = 88; char c = i;
,
但是允许char c = 88;
。
不是普通数字和int
字面数字吗?这是怎么允许的?
答案 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中的值。 希望这有一定道理。