Java中字符与int的转换
不能从int转换为char,因此这是非法的Java中字符与int的转换,java,Java,不能从int转换为char,因此这是非法的 inti=88;char c=i, 然而,这是允许的char c=88 不是一个普通的数字和intliteral吗?这是如何允许的?char在Java中实际上是一种无符号16位整数类型 与其他整数类型一样,您可以执行从整数常量到任何整数类型的赋值转换,只要它在适当的范围内。这就是为什么 byte b = 10; 也行 联合联络小组: 此外,如果表达式是 类型的常量表达式(§15.28) 字节、短字符、字符或整数: 可以使用缩小原语转换 如果变量的类
inti=88;char c=i代码>,
然而,这是允许的char c=88代码>
不是一个普通的数字和int
literal吗?这是如何允许的?char
在Java中实际上是一种无符号16位整数类型
与其他整数类型一样,您可以执行从整数常量到任何整数类型的赋值转换,只要它在适当的范围内。这就是为什么
byte b = 10;
也行
联合联络小组:
此外,如果表达式是
类型的常量表达式(§15.28)
字节、短字符、字符或整数:
- 可以使用缩小原语转换
如果变量的类型为
字节、短字符或字符,以及
常量表达式为
可表示为
变数李>
- 缩小的原语
拳击后的转换
如果
变量为:
- 字节和值
常数表达式的形式是
可在类型字节中表示
- 短
以及常数的值
表达式在
输入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值需要使用primitive cast来更改char中的值的原因。
希望这有点道理。char不属于整数组。我的理解如下,因为编译器可以检查文本的值,所以它可以顺利地执行转换,在其他类型中,它会导致数据丢失,是吗correct@user265260:Um是的,字符不属于整数组。请参阅-“整数类型为byte、short、int和long,其值分别为8位、16位、32位和64位带符号的两位补码整数,以及char,其值为16位无符号整数,表示UTF-16代码单位(§3.1)。”这可能是一个附带问题,但为什么char c=2.0
不允许。@user265260:因为这是一个类型为double
的常量表达式。不要认为这都是关于丢失数据的,一个可以放入字符的字节不能分配给字符either@GeorgianBenetatos这是因为byte
(-128..127)的范围没有完全包含在char
(0..65535)因此存在有损转换的风险。