在java中,Char变量减去Char变量解析为Int

在java中,Char变量减去Char变量解析为Int,java,parsing,char,Java,Parsing,Char,我知道这很琐碎,但我找不到合适的解释。我有以下代码 str="1230" int rez=str.charAt(3) - '0'; rez=3; 这种解析是如何工作的?“幕后”achar只是一个具有特定范围的int(非常简单的解释) 尝试以下代码来说服自己: System.out.println((int)“0”);//这不会输出0 System.out.println((int)'a');//这项工作也是如此 这就是为什么可以对字符进行算术运算。只要字符是数字,就可以通

我知道这很琐碎,但我找不到合适的解释。我有以下代码

str="1230"
int rez=str.charAt(3) - '0';
rez=3;
这种解析是如何工作的?

“幕后”a
char
只是一个具有特定范围的int(非常简单的解释)

尝试以下代码来说服自己:

System.out.println((int)“0”);//这不会输出0
System.out.println((int)'a');//这项工作也是如此

这就是为什么可以对字符进行算术运算。

只要字符是数字,就可以通过减去
'0'
得到等效的
int
值。
'0'
的ASCII编码是十进制的
48
'1'
是十进制的
49
,等等

So'8'-'0'=56-48=8

对于数字,可以像这样解析整个字符串(假设所有字符都是数字,否则结果就没有意义)

解释

In the above loop, first time thru
result = 0 * 10 + '1'-'0 = 1
second time thru 
result = 1 * 10  + '2'-'0' = 12
third time thru 
result = 12 * 10  + '3'-'0' = 123
last time thru 
result = 123 * 10  + '0'-'0' = 1230

有什么问题?(此外,char或多或少都是整数,算术对其进行运算,这就是为什么可以使用c-‘0’。“这种解析是如何工作的?”-你是在问语言分析器是如何解析源代码的吗?也许你应该更深入地了解计算机的工作原理以及在屏幕上显示数字或字母所需的内容。可以从这里开始:@NoDataFound-请参阅我对下面答案的评论。当OP显然试图在char
数据类型。例如,将OP的输入字符串更改为“123A”然后执行与OP问题中相同的算术运算。结果是非敏感的。也许你应该指出这一点?在幕后,a
char
是一个UTF-16字符,以几种不同的方式表示-其中一种方式是作为表示特定UTF-16字符的整数值。当然@randy,请随意编辑m我不知道为什么会有误导性,所以我没有回答
1230
In the above loop, first time thru
result = 0 * 10 + '1'-'0 = 1
second time thru 
result = 1 * 10  + '2'-'0' = 12
third time thru 
result = 12 * 10  + '3'-'0' = 123
last time thru 
result = 123 * 10  + '0'-'0' = 1230