我正在通过丹尼尔·梁在第9章“字符串”中的“Java编程第9版简介”学习Java,我遇到了这段代码:
public static int hexCharToDecimal(char ch) {
if (ch >= 'A' && ch <= 'F')
return 10 + ch - 'A';
else
return ch - '0';
}有人能解释一下这里发生了什么吗?如何从整数中添加/减去字符,其背后的含义是什么?
发布于 2014-01-18 18:48:49
这是因为char是一个基元类型,可以用作一个数值。字符串中的每个字符都被编码为一个特定的数字(在所有情况下都不是完全正确的,但是对于基本的理解来说是足够好的),Java允许您以这种方式使用字符。
它可能允许这样做,主要是出于历史原因,这就是它在C中的工作方式,他们可能会用“性能”或类似的东西来激励它。
如果你觉得很奇怪,那就别担心,我也这么认为
另一个答案其实是不正确的。ASCII是一种特定的编码(编码是一种规范,上面写着"1 = A,2= B,.,255 = Space"),这不是Java中使用的编码。Java字符宽两个字节,并通过unicode字符编码进行解释。
发布于 2014-01-18 18:45:54
字符依次存储为整数( ASCII值),这样就可以对整数执行add和sub,这将返回字符的ASCII值。
发布于 2014-01-18 18:55:08
不管Java如何实际存储char数据类型,可以确定的是,从字符'A'中减去的字符'A'将表示为null字符\0。在内存中,这意味着每一个位都是0。char在内存中占用的内存大小可能因语言而异,但据我所知,null字符在所有语言中都是相同的,每一个位都等于0。
作为int值,每一位都等于0的内存段表示整数值0。
事实证明,当你做“字符数学”时,从任何其他字母字符(相同情况下)中减去任何字母字符,都会导致比特被翻转,如果你把它们解释为int,就会表示这些字符之间的距离。此外,从任何其他数字字符中减去char '0'将导致减去的char的int值,原因基本上是相同的。
'A' - 'A' = '\0'
'a' - 'a' = '\0'
'0' - '0' = '\0'https://stackoverflow.com/questions/21208308
复制相似问题