2011-09-21 20 views
9

我試圖找到,但似乎都是模糊的。 我需要將Object o轉換爲Double。 正確的方法首先轉換爲字符串? 謝謝。Java正確的方式轉換/投出對象爲Double

+2

什麼是特殊類型的對象?它實際上是一個Double,還是其他的? – nos

+0

什麼是對象?它是一個未知的類或已經鍵入到Object的Double類。 – Rontologist

+0

「我試圖找到,但都顯得模糊。」 - 你的問題太模糊,無法得到明顯的答案。請詳細說明。什麼是'對象o',意圖是什麼? – Saket

回答

8

如果對象不是Double,則不能將對象投射到Double

查看API

特別注意

valueOf(double d);

valueOf(String s);

這些方法讓你從一個字符串或雙原始得到一個Double實例的方式。 (也不是構造函數;請閱讀文檔以瞭解它們的工作原理)您嘗試自然轉換的對象必須爲您提供可以轉換爲double的對象。

最後,請記住,Double實例是不可變的 - 一旦創建,您將無法更改它們。

25
new Double(object.toString()); 

但是,對於我來說,你似乎很奇怪你要從一個對象變成一個對象。在嘗試進行轉換之前,您應該更好地瞭解要開始的對象類別。您可能會遇到一些代碼質量問題。

請注意,這是一個轉換,而不是轉換。

+2

如果object爲null,則會拋出nullpointerexception。 –

+0

Double.valueOf(object.toString())使用較少的內存 – Loolooii

6

您可以使用instanceof運算符在轉換之前測試它是否爲double。然後你可以安全地將它轉換爲雙精度。另外,您可以根據其他已知類型(例如Integer)對其進行測試,然後根據需要將它們強制手動雙擊。

Double d = null; 
    if (obj instanceof Double) { 
     d = (Double) obj; 
    } 
1

在Java之前的版本1.7,你可以不投對象基本類型

double d = (double) obj; 

你可以施放對象爲Double就好

Double d = (Double) obj; 

當心,它可以拋出一個如果對象不是Double,則爲ClassCastException

2



另外值得一提的是,如果您被迫使用1.5之前的舊Java版本,並且您正嘗試使用集合,則無法使用Double等類型對集合進行參數化。

您必須手動「」到類Double通過解析和鑄造,做這樣的事情增加新的項目,以及「拆箱」的原始double時:

LinkedList lameOldList = new LinkedList(); 
lameOldList.add(new Double(1.2)); 
lameOldList.add(new Double(3.4)); 
lameOldList.add(new Double(5.6)); 

double total = 0.0; 
for (int i = 0, len = lameOldList.size(); i < len; i++) { 
    total += Double.valueOf((Double)lameOldList.get(i)); 
} 


老學校名單將只包含類型Object,所以必須投到Double

此外,您將無法在Java早期版本中使用增強型for循環遍歷列表 - 只能使用for-loop。

+1

您的意思是「1.5之前」?這就是泛型和自動裝箱的介紹。還是你的意思是別的? –

+0

哎呀你是正確的@AlexeyRomanov,我編輯了我的答案來反映這一點。 –

4

如果您的對象表示一個數字,例如Integer,則可以將其轉換爲數字,然後調用doubleValue()方法。

Double asDouble(Object o) { 
    Double val = null; 
    if (o instanceof Number) { 
     val = ((Number) o).doubleValue(); 
    } 
    return val; 
} 
0

試過所有這些方法轉換 - >

obj2Double

public static void main(String[] args) { 

    Object myObj = 10.101; 
    System.out.println("Cast to Double: "+((Double)myObj)+10.99); //concates 

    Double d1 = new Double(myObj.toString()); 
    System.out.println("new Object String - Cast to Double: "+(d1+10.99)); //works 

    double d3 = (double) myObj; 
    System.out.println("new Object - Cast to Double: "+(d3+10.99));  //works 

    double d4 = Double.valueOf((Double)myObj); 
    System.out.println("Double.valueOf(): "+(d4+10.99));  //works 

    double d5 = ((Number) myObj).doubleValue(); 
    System.out.println("Cast to Number and call doubleValue(): "+(d5+10.99));  //works 

    double d2= Double.parseDouble((String) myObj); 
    System.out.println("Cast to String to cast to Double: "+(d2+10));  //works 
}