据我了解,char 是单个字符,即字母、数字、标点符号、制表符、空格或类似的东西。因此,当我这样做时:
char c = '1';
System.out.println(c);
输出 1 正是我所期望的。那么为什么当我这样做时:
int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);
我最终得到输出50?
你得到它是因为它添加了字符的ASCII 值。您必须先将其转换为 int。
数字 1 是 ASCII 代码 49。编译器正在对您的请求执行它可以做的唯一明智的事情,并将类型转换为 int。
最终得到 out of 是50
因为您已告诉 Java 将加法的结果视为int
以下行中的 an:
int ans = a + c;
而不是int
您声明ans
为char
.
像这样:
final int a = 1;
final char c = '1';
final char ans = (char) (a + c);
System.out.println(ans);
因为您将 c (1) 的值添加到 'a' 的 unicode 值,即 49。前 128 个 unicode 点值与 ASCII 相同,您可以在此处找到这些值:
注意 Chr '1' 是 12 月 49 日。其余的 unicode 点在这里:
char 是伪装的 int。char 通过将字符编码为 int 来表示字符。例如,'c' 编码为 49。当你将它们加在一起时,你会得到一个 int,它是 char 的代码和 int 的值的总和。
'1' 是一个数字,而不是数字,并以 ASCII 编码为值 49。
Java 中的字符可以提升为 int,因此如果您要求将类似 1 的 int 添加到类似 '1'(别名 49)的 char 中,则将更窄的类型 char 提升为 int,得到 49,+ 1 => 50。
请注意,每个非数字字符都可以以相同的方式添加:
'a' + 0 = 97
'A' + 0 = 65
' ' + 0 = 32
'char' 实际上只是一个两字节的无符号整数。
价值'1'
和1
是非常不同的。'1'
被编码为两字节值 49。
“字符编码”是您要研究的主题。或来自 Java 语言规范:http ://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1