看到这段代码能工作,我感到惊讶。我认为在Java中,char和int是两种不同的数据类型,我本来以为必须将char强制转换为int才能得到ascii等效值。为什么这样做会起作用呢?
String s = "hello";
int x = s.charAt(1);
System.out.println(x);
看到这段代码能工作,我感到惊讶。我认为在Java中,char和int是两种不同的数据类型,我本来以为必须将char强制转换为int才能得到ascii等效值。为什么这样做会起作用呢?
String s = "hello";
int x = s.charAt(1);
System.out.println(x);
char
可以自动转换为一个 int
。参见 JLS 5.1.2:
(强调添加)下列19种基本类型的转换被称为扩展原始类型转换:
...
- char 转 int、long、float 或 double
...
将有符号整数值进行扩展转换以适应整型 T,只需对整数值的二进制补码表示进行符号扩展即可填充更宽的格式。将 char 转换为整型 T 的扩展转换将用零扩展字符值的表示来填充更宽的格式。
char
和 int
是两种不同的类型,但这是可以运作的,因为 int
比 char
更精确。也就是说,char
的每个值都可以表示为 int
,所以在转换时不会丢失任何数据。
char
是一个 16 位无符号值,而int
是一个 32 位有符号值。你可以将 char 赋值给 int。 - Peter Lawrey