【发布时间】:2011-03-02 10:05:20
【问题描述】:
您不能从 int 转换为 char,所以这是非法的
int i = 88; char c = i;,
不过这是允许的char c = 88;。
不是纯数字和int 文字吗?这是怎么允许的?
【问题讨论】:
标签: java
您不能从 int 转换为 char,所以这是非法的
int i = 88; char c = i;,
不过这是允许的char c = 88;。
不是纯数字和int 文字吗?这是怎么允许的?
【问题讨论】:
标签: java
实际上,从int 转换为char 是合法的,它只需要显式转换,因为它可能会丢失数据:
int i = 88;
char c = (char) i;
但是,对于文字,编译器知道它是否适合 char 而不会丢失数据,并且只会在您使用太大而无法放入 char 的文字时抱怨:
char c = 70000; // compiler error
【讨论】:
byte (-128..127) 的范围不完全包含在char (0..65535) 的范围内,所以 是 i> 有损转换的风险。
char 在 Java 中实际上是一个无符号的 16 位整数类型。
与其他整数类型一样,您可以执行从整数常量到任何整数类型的赋值转换,只要它在适当的范围内。这就是为什么
byte b = 10;
也可以。
来自 JLS,section 5.2:
此外,如果表达式是 类型的常量表达式(§15.28) 字节、短、字符或整数:
- 缩小原语转换可能 如果变量的类型是 byte、short 或 char,以及 常量表达式是 可表示的类型 多变的。
- 缩小原语 转换后是拳击 转换可以使用,如果类型 变量是:
- 字节和值 常量表达式是 可以用类型字节表示。
- 短 和常数的值 表达式可以在 键入简短。
- 字符和值 常量表达式是 可以用 char 类型表示。
【讨论】:
char c = 2.0; 不允许。
double类型的常量表达式。
这是因为整数或小于 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 中的值的原因相同。 希望这有点道理。
【讨论】: