加法和减法字符为什么这有效?(Java)的

thr*_*rax 7 java

我正在通过Daniel liang在第9章"字符串"中介绍"Java编程第9版"来学习Java我遇到过这段代码:

    public static int hexCharToDecimal(char ch){
       if (ch >= 'A' && ch <= 'F')
           return 10 + ch - 'A';
       else
          return ch - '0';
}
Run Code Online (Sandbox Code Playgroud)

oki所以有人可以解释刚刚发生在这里的事情吗?如何添加,整数中的子字符以及它背后的含义是什么,谢谢.

Mic*_*ski 9

关注我对ASCII值的讨论,即使我已经包含了Unicode字符.

来自Docs

char数据类型是单个16位Unicode字符.

char可以表示为:

  • 它的代码点值(Unicode) - min:char和max:'\u0000'
  • ASCII值 min:0和最大值:65,535(含)

需要注意的是'\uffff'0 == \u0000-以及介于两者之间的.它们是相应的值.

在你的代码中,字符由它们的ASCII值表示来进行算术运算(整数从0到65,535).

例如,char 65,535 == \uffff可以用其int(ASCII)值表示char:

System.out.print('A'); // prints A
System.out.print((int)('A')); // prints 65 because you casted it to an int
Run Code Online (Sandbox Code Playgroud)

注意,a char c = 'A';是一个16位有符号整数,所以即使a char c = 65;也是16位,a 'A' == 65(65,535)的最大整数值超过a 'A'(32,767)的最大整数值.因此,65从一个演员到一个short不能总是工作.并且a的最小整数值char是0,而a的最小整数值char是-32,768.


对于你的代码,让我们说char是 short

return 10 + ch - 'A';
Run Code Online (Sandbox Code Playgroud)

将返回(short)所以它将返回char

出于所有意图和目的,它将char数据类型"转换" 为整数值,然后进行基本算术运算.该short炭可以通过它的整数ASCII值表示char

让我们说炭是 'D'

if (ch >= 'A' && ch <= 'F')
Run Code Online (Sandbox Code Playgroud)

所以它会

return ch - '0';
Run Code Online (Sandbox Code Playgroud)

哪会返回'D' == 68所以它会返回68