Java调用charAt返回ASCII数值而非预期数字问题求解
问题原因
- Java的
String.charAt()方法返回值为char类型,本质是存储字符对应的ASCII编码的数值类型:字符'5'对应的ASCII码为十进制53,字符'4'对应的ASCII码为十进制52。你直接调用Double.valueOf(char)时,会直接把char对应的ASCII码数值转换为double类型,而非将字符字面代表的数字转为数值。 - 你在测试类中直接打印
postfix.charAt(0)得到5,是因为System.out.println对char类型的输出逻辑是打印字符本身,而非对应的ASCII码,因此你之前误以为charAt()返回的是数字5,实际返回的是字符'5'。
解决方法
有两种常用方案可以实现将数字字符转为对应的数值:
- 方案1:先将字符转为字符串,再转换为Double类型
修改Notation类的返回逻辑即可:
public static double evaluatePostfixExpression(String postfixExpr) throws InvalidNotationFormatException, StackOverflowException, StackUnderflowException { // 先转String再转Double return Double.valueOf(String.valueOf(postfixExpr.charAt(0))); }
- 方案2:利用ASCII码偏移计算
数字字符'0'到'9'的ASCII码是连续递增的,将目标字符减去'0'的ASCII码即可得到对应的数字值:
public static double evaluatePostfixExpression(String postfixExpr) throws InvalidNotationFormatException, StackOverflowException, StackUnderflowException { // 利用ASCII偏移计算数字值 return (double)(postfixExpr.charAt(0) - '0'); }
内容的提问来源于stack exchange,提问作者Anonymous Heat
相关产品推荐
相关产品推荐

