Java中的char和int是什么?

6

看到这段代码能工作,我感到惊讶。我认为在Java中,char和int是两种不同的数据类型,我本来以为必须将char强制转换为int才能得到ascii等效值。为什么这样做会起作用呢?

String s = "hello";
int x = s.charAt(1);
System.out.println(x);

2
char 是一个 16 位无符号值,而 int 是一个 32 位有符号值。你可以将 char 赋值给 int。 - Peter Lawrey
2个回答

12
一个 char 可以自动转换为一个 int。参见 JLS 5.1.2:

下列19种基本类型的转换被称为扩展原始类型转换:

...

  • char 转 int、long、float 或 double

...

将有符号整数值进行扩展转换以适应整型 T,只需对整数值的二进制补码表示进行符号扩展即可填充更宽的格式。将 char 转换为整型 T 的扩展转换将用零扩展字符值的表示来填充更宽的格式。

(强调添加)

4

charint 是两种不同的类型,但这是可以运作的,因为 intchar 更精确。也就是说,char 的每个值都可以表示为 int,所以在转换时不会丢失任何数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接