6

据我了解,char 是单个字符,即字母、数字、标点符号、制表符、空格或类似的东西。因此,当我这样做时:

char c = '1';
System.out.println(c);

输出 1 正是我所期望的。那么为什么当我这样做时:

int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);

我最终得到输出50

4

7 回答 7

8

你得到它是因为它添加了字符的ASCII 值。您必须先将其转换为 int。

于 2012-04-27T22:19:20.453 回答
2

数字 1 是 ASCII 代码 49。编译器正在对您的请求执行它可以做的唯一明智的事情,并将类型转换为 int。

于 2012-04-27T22:20:30.720 回答
2

最终得到 out of 是50因为您已告诉 Java 将加法的结果视为int以下行中的 an:

int ans = a + c;

而不是int您声明anschar.

像这样:

final int a = 1;
final char c = '1';
final char ans = (char) (a + c);
System.out.println(ans);
于 2012-04-27T22:21:01.133 回答
1

因为您将 c (1) 的值添加到 'a' 的 unicode 值,即 49。前 128 个 unicode 点值与 ASCII 相同,您可以在此处找到这些值:

http://www.asciitable.com/

注意 Chr '1' 是 12 月 49 日。其余的 unicode 点在这里:

http://www.utf8-chartable.de/

于 2012-04-27T22:21:50.657 回答
0

char 是伪装的 int。char 通过将字符编码为 int 来表示字符。例如,'c' 编码为 49。当你将它们加在一起时,你会得到一个 int,它是 char 的代码和 int 的值的总和。

于 2012-04-27T22:20:47.020 回答
0

'1' 是一个数字,而不是数字,并以 ASCII 编码为值 49。

Java 中的字符可以提升为 int,因此如果您要求将类似 1 的 int 添加到类似 '1'(别名 49)的 char 中,则将更窄的类型 char 提升为 int,得到 49,+ 1 => 50。

请注意,每个非数字字符都可以以相同的方式添加:

'a' + 0 = 97
'A' + 0 = 65
' ' + 0 = 32
于 2012-04-27T22:22:51.827 回答
0

'char' 实际上只是一个两字节的无符号整数。

价值'1'1是非常不同的。'1'被编码为两字节值 49。

“字符编码”是您要研究的主题。或来自 Java 语言规范:http ://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1

于 2012-04-27T22:25:31.263 回答