Java (对我来说)字符数组中无法解释的值

Java (对我来说)字符数组中无法解释的值,java,character-arrays,Java,Character Arrays,我被一些我真的不明白的事情缠住了,我希望这里有人能理解 谁能解释一下为什么“nextOne”的值是51?很明显,表达式数组中索引2处的数字是3,那么为什么它在nextOne中存储51而不是3呢 这是: 数组中的字符是“3”。它的Unicode值为51-它是字符U+0033 如果将nextOne的类型改为char,而不是int,则会看到“3” 理解作为字符的数字和整数值之间的差异是很重要的,同时还要理解隐藏在字符后面的数字;在Java中,它们基本上是UTF-16代码单元。因为51是数字3的ASCI

我被一些我真的不明白的事情缠住了,我希望这里有人能理解

谁能解释一下为什么“nextOne”的值是51?很明显,表达式数组中索引2处的数字是3,那么为什么它在nextOne中存储51而不是3呢

这是:
数组中的字符是“3”。它的Unicode值为51-它是字符U+0033

如果将
nextOne
的类型改为
char
,而不是
int
,则会看到“3”


理解作为字符的数字和整数值之间的差异是很重要的,同时还要理解隐藏在字符后面的数字;在Java中,它们基本上是UTF-16代码单元。

因为51是数字
3
的ASCII值。第一个数字是
3
,其ASCII代码是51。

字符
'3'
对应于
51的整数值(它是ASCII/unicode值)。

nextOne包含字符的值,在字符“3”的情况下,它是51


如果需要字符表示的数字,则需要对其进行转换。对于ASCII,这可以通过减去字符“0”的值来实现。

51是三个字符的ASCII码,因为
表达式
是一个字符数组,
nextOne
是一个
int
,所以必须将字符转换为int

数字3的ASCII码是51。以下表达式将在控制台中打印
“true”

System.out.println('3' == (char) 51);

有关详细信息,请查看。

如果需要减去整数所需的数字,请查看字符“3”的ascii码。

我做到了!它现在可以用了,没有你们我是做不到的。 然而有趣的是,你们所有人都为我提出了选择,但不是(在我看来)最终的选择。你们告诉我存储的整数是3的ASCII码,而不是实际的整数3。这让我想起了Character类中的一个方法getNumericValue(char)。使用此方法,我只需从char数组中检索整数3,而无需转换自己

nextNumber = nextNumber * 10 + Character.getNumericValue(expression[k]);

感谢@howard将链接编辑到上传的图像中

nextOne
是一个整数,您将向其传递一个char值,该值可以解释为整数。。因此,“3”是51个ASCII码。@ChristofferHammarström:
nextOne
已经是
int
。我建议把它改成
char
。数值将是相同的,但我希望它在调试器中以不同的方式显示。请尝试收集表示数字的后续字符(
Character.isDigit()
),然后使用
Integer.parseInt()
转换它们。或者如果你想让它们一个一个,
Character.digit(char,int)
@ratchetfreak:no,每个
char
只有16位。如果需要表示不在基本多语言平面中的Unicode字符,则需要具有代理项对的字符串来表示65535以上的代码点。