2011-09-21 63 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 
}