簡體   English   中英

為什么“即時”轉換在Java中給我一個編譯錯誤?

[英]Why does “on-the-fly” casting give me a compile error in Java?

我來自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是否說要根據需要強制轉換,但是為什么我的程序可以完美地編譯和運行?

如果您想將其轉換為兩次嘗試如下

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

要么

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

我認為最好使用Double.parseDouble(fahrString)因為據我所知,您正在嘗試將String轉換為double。

您嘗試的方法是錯誤的,這不是強制轉換的方法。

投射是這樣完成的:

(Double)fahrstring

不是這樣的:

Double(fahrstring)

Java在嘗試調用名為Double的方法時會解釋后者,這就是它抱怨找不到符號的原因(您沒有名為Double的方法)

順便說一句,如果沒有特定的原因使用Double ,我建議改為使用原始的等效double

這將構造一個新的double:

fahr = new Double(fahrString);

內聯等效項為:

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

記錄下來的不是強制轉換,而是創建一個新對象來解析字符串。 據我所知,沒有一種語言(甚至是python)都無法從String轉換為double。 在python中,沒有新的運算符,因此:

cel = double(fahrString)

仍然會創建一個新對象。

您只是錯過了一些括號;)

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

Double.parseDouble(String)將您的String文字轉換為Double值,前提是String值對double轉換有效

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

這是將String解析為雙精度值的最簡單方法。 當傳遞的字符串文字為null或傳遞的字符串文字不是用於進行兩次轉換的有效字符串時,這將引發NPE / NumberFormatException

嘗試

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM