Java中字符与int的转换

Java中字符与int的转换,java,Java,不能从int转换为char,因此这是非法的 inti=88;char c=i, 然而,这是允许的char c=88 不是一个普通的数字和intliteral吗?这是如何允许的?char在Java中实际上是一种无符号16位整数类型 与其他整数类型一样,您可以执行从整数常量到任何整数类型的赋值转换,只要它在适当的范围内。这就是为什么 byte b = 10; 也行 联合联络小组: 此外,如果表达式是 类型的常量表达式(§15.28) 字节、短字符、字符或整数: 可以使用缩小原语转换 如果变量的类

不能从int转换为char,因此这是非法的
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)因此存在有损转换的风险。