据我所知,char是一个单个字符,即一个字母,一个数字,一个标点符号,一个标签,一个空格或类似的东西。因此当我这样做时:
char c = '1';
System.out.println(c);
输出1正是我的预期。那么为什么当我这样做时:
int a = 1;
char c = '1';
int ans = a + c;
System.out.println(ans);
我最终输出 50 ?
答案 0 :(得分:7)
你得到的是因为它正在添加char的ASCII value。您必须先将其转换为int。
答案 1 :(得分:2)
数字1是ASCII代码49.编译器正在做它对你的请求唯一合理的事情,并且对int进行类型转换。
答案 2 :(得分:2)
您最终没有使用50
,因为您已告知Java将添加结果视为以下行中的int
:
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);
答案 3 :(得分:1)
因为你要将c(1)的值添加到'a'的unicode值,即49.前128个unicode点值与ASCII相同,你可以在这里找到:
注意Chr'1'是Dec 49.其余的unicode点在这里:
答案 4 :(得分:0)
char是伪装的int。 char通过将其编码为int来表示字符。所以例如'c'用49编码。当你把它们加在一起时,你得到一个int,它是char的代码和int的值的总和。
答案 5 :(得分:0)
'1'是一个数字,而不是数字,并以ASCII编码为49.
Java中的Chars可以提升为int,所以如果你要求将类似1的int添加到像'1'这样的字符,别名49,则将更窄的类型char提升为int,得到49,+ 1 =&gt ; 50。
请注意,每个非数字字符都可以添加相同的方式:
'a' + 0 = 97
'A' + 0 = 65
' ' + 0 = 32
答案 6 :(得分:0)
'char'实际上只是一个双字节无符号整数。
值'1'
和1
非常不同。 '1'
被编码为双字节值49。
“字符编码”是您要研究的主题。或者来自Java语言规范:http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.1