Java中加减过程中的字符行为

Java中加减过程中的字符行为,java,character,ascii,Java,Character,Ascii,添加: System.out.println('3'+'1') 输出:52(我相信这是因为ASCII值) 减法: System.out.println('3'-'1') 输出:2 问题:既然加法需要ASCII值,但为什么减法需要实际值,有人能帮忙吗?这是一致的。ASCII值3为51,1为49 因此,您的第一个表达式是51+49=100 第二个是51-49=2。有趣的巧合,答案是一样的,如果他们是数字而不是字符 编辑我看到你的第一个表达式得到52。这是如果您编写了System.out.printl

添加

System.out.println('3'+'1')

输出:52(我相信这是因为ASCII值)

减法

System.out.println('3'-'1')

输出:2


问题:既然加法需要ASCII值,但为什么减法需要实际值,有人能帮忙吗?

这是一致的。ASCII值3为51,1为49

因此,您的第一个表达式是
51+49=100

第二个是
51-49=2
。有趣的巧合,答案是一样的,如果他们是数字而不是字符


编辑我看到你的第一个表达式得到52。这是如果您编写了
System.out.println('3'+1'),就会得到的结果
(第二个字符周围没有引号),因为ASCII 51+int1=52。

您的猜测是正确的,加法需要ASCII值。 减法也需要ASCII值

但是sout('3'+'1')给出的答案是=100。(因为3的ASCII值为51,1的ASCII值为49)


sout('3'-'1'),给出的答案为2。

首先,
char
是一个UTF-16编码单元,UTF-16是Unicode字符集的几种编码之一

对于字符U+0000到U+D7FF和U+E000到U+FFFF的范围,UTF-16使用值“\u0000”到“\uD7FF”和“\uE000”到“\uFFFF”在一个代码单元(
char
)中对其进行编码。因此,在这些范围内,
char
可以被视为一个完整的字符

现在,在某些代码点范围内,顺序有时很有用:数字“0”到“9”以及基本拉丁字母“A”到“Z”和“A”到“Z”是自然顺序

因此,在这些情况下,您可以使用减法来确定值之间的“距离”3'-'1'=2表示'3'是'1'之外的两个

(将这种逻辑应用于字母也是很有诱惑力的。然而,由于字母表因语言而异,因此使用字符串对字母表进行排序更为直接,例如,“ABCDEFGHIJKLMNOPQRSTUVWXYZÆØ”。)


字符的添加不是我可以赋予('3'+'1')意义的东西,尽管它是允许的,因为
char
可以在整数(UTF-16代码单位值)之间隐式或显式转换

你运行过这个代码吗?我在这里粘贴了您的两行,但没有得到与您相同的输出。我可以知道您得到的输出是什么吗?@Prasanth2617它应该与您得到的完全相同。ASCII值是实际值,因此我不理解您所问的差异。不幸的是,ASCII值和实际的int值之间存在差异同样的结果,所以我很困惑。。!!!非常感谢@hughjdavey我没注意到,不管数字还是字符,他们给出的答案都是一样的!!!:)没问题。如果答案已经回答了你的问题,你能投票并接受它吗:)你也可以从省略第二个字符的引号中得到52<代码>3+1等于3+49等于52。