[英]Why a missing package statement does not give a compile time error in 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.