【发布时间】:2012-05-08 16:06:21
【问题描述】:
据我了解,char 是单个字符,即字母、数字、标点符号、制表符、空格或类似的东西。因此,当我这样做时:
char c = '1';
System.out.println(c);
输出 1 正是我所期望的。那么为什么当我这样做时:
int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);
我最终得到输出 50?
【问题讨论】:
据我了解,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 value。您必须先将其转换为 int。
【讨论】:
数字 1 是 ASCII 代码 49。编译器正在对您的请求执行它可以做的唯一明智的事情,并将类型转换为 int。
【讨论】:
您最终得到 out of 50,因为您在以下行中告诉 Java 将加法的结果视为 int:
int ans = a + c;
您将 ans 声明为 char,而不是 int。
像这样:
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 的值之和。
【讨论】:
int 是 java 类型,char 不是 int 类型的伪装。它是一个字符,但它确实有一个 integer 值(int 也是如此)。
'1' 是一个数字,而不是数字,并以 ASCII 编码为值 49。
Java 中的字符可以提升为 int,所以如果你要求将类似 1 的 int 添加到类似 '1' 的 char(别名 49)上,则更窄的类型 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
【讨论】: