为什么“on-the-fly”转换会给我一个Java编译错误?

时间:2013-12-06 12:34:01

标签: java casting

我来自Python背景,并且正在学习一些Java教程(该语言的新手)并且正在努力理解我遇到的错误。

这段代码很好用:

fahrString = JOptionPane.showInputDialog("Enter the temperature in F");
fahr = new Double(fahrString);
cel = (fahr - 32) * 5.0/9.0;

但是这段代码也很完美......

fahrString = JOptionPane.showInputDialog("Enter the temperature in F");
cel = (Double(fahrString) - 32) * 5.0/9.0;

...但是给出了编译错误:

TempConvGUI.java:12: cannot find symbol
symbol  : method Double(java.lang.String)
location: class TempConvGUI
        cel = (Double(fahrString) - 32) * 5.0/9.0;
               ^
1 error

为什么?我可以理解,如果Java说根据需要进行转换是不行的,那么为什么我的程序编译和运行完美?

6 个答案:

答案 0 :(得分:4)

如果您想将其转换为双击,请按以下步骤

((double)fahrString - 32) * 5.0/9.0;

((Double)fahrString - 32) * 5.0/9.0;

我认为最好使用Double.parseDouble(fahrString),因为据我所知,你试图将String转换为double。

你尝试的方式是错的,这不是铸造的方式。

答案 1 :(得分:2)

施法就像这样:

(Double)fahrstring

不喜欢这样:

Double(fahrstring)
当您尝试调用名为Double的方法时,Java会解释后者,这就是为什么它抱怨它无法找到符号(您没有名为Double的方法)的原因

顺便说一句,如果没有具体的理由使用Double,我建议改为使用等效原语double

答案 2 :(得分:2)

这构造了一个新的双重:

fahr = new Double(fahrString);

内联等价物将是:

cel = (new Double(fahrString) - 32) * 5.0/9.0;

对于记录而言,不是强制转换,而是创建一个解析字符串的新对象。我所知道的语言(甚至python)都不允许你从String转换为double。在python中没有新的运算符,所以:

cel = double(fahrString)

仍然会创建一个新对象。

答案 3 :(得分:0)

你错过了一些方括号;)

fahrString = JOptionPane.showInputDialog("Enter the temperature in F");
cel = ((Double)fahrString - 32) * 5.0/9.0;

答案 4 :(得分:0)

Double.parseDouble(String)将您的String文字转换为Double值,前提是String值对双重转换有效

cel = (Double.parseDouble(fahrString) - 32) * 5.0/9.0;

这是将String解析为double值的最简单方法。这将在传递时抛出NPE当传递的String文字不是用于执行双重转换的有效String时,String literal为null / NumberFormatException

答案 5 :(得分:0)

尝试

cel = ((Double.parseDouble(fahrString)) - 32) * 5.0/9.0;