对已作为字符串命名的对象使用 Double.parseDouble 时出错



我正在编写一个中缀评估程序,但遇到以下语句的问题:

c = Double.parseDouble((String) operands.pop());

"操作数"是存储操作数的堆栈。.pop(( 方法返回一个类型 T 的对象(因为堆栈是 T 类型的 ArrayList(。由于 Double.parseDouble 需要一个字符串作为参数,所以我把它命名为一个字符串。

但是,我收到此错误: java.lang.ClassCastException: java.lang.Double 不能强制转换为 java.lang.String

我犯了什么错误?

异常实际上发生在表达式上

(String) operands.pop()

不能使用(String)将双精度转换为字符串,因为它不是安全的强制转换。

编译器告诉你,operands.pop()给出的值已经是双精度了!

如果要进行转换,则需要先对其使用toString()方法。

异常是指示pop方法返回java.lang.Double((的对象,因此无需强制转换和解析它。即使由于某种原因想要强制转换和解析,也可以使用 String.valueOf(operands.pop(((。

最新更新