Java将对象转换/强制转换为双精度的正确方法

Java将对象转换/强制转换为双精度的正确方法,java,casting,double,Java,Casting,Double,我需要将对象o转换为Double。首先将其转换为字符串是否正确?如果对象不是双精度对象,则不能将对象强制转换为双精度对象 看看这本书 特别注意 valueOf(双d) 及 valueOf(字符串s) 这些方法提供了一种从字符串或Double原语获取Double实例的方法。(也不是构造器;阅读文档了解它们是如何工作的)您试图转换的对象必须自然地提供一些可以转换为double的东西 最后,请记住,Double实例是不可变的——一旦创建,就无法更改它们 new Double(object.toStri

我需要将对象o转换为Double。首先将其转换为字符串是否正确?

如果对象不是双精度对象,则不能将对象强制转换为双精度对象

看看这本书

特别注意

valueOf(双d)

valueOf(字符串s)

这些方法提供了一种从字符串或Double原语获取
Double
实例的方法。(也不是构造器;阅读文档了解它们是如何工作的)您试图转换的对象必须自然地提供一些可以转换为double的东西

最后,请记住,
Double
实例是不可变的——一旦创建,就无法更改它们

new Double(object.toString());
但我觉得很奇怪,你从一个物体变成了一个替身。在尝试转换之前,您应该更好地了解要从哪一类对象开始。您可能会遇到一些代码质量问题


请注意,这是一个转换,而不是强制转换。

您可以使用instanceof操作符在强制转换之前测试它是否为双精度。然后您可以安全地将其掷成双精度。此外,您可以针对其他已知类型(例如Integer)对其进行测试,然后根据需要手动将其强制为双精度

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

在1.7之前的Java版本中,不能将对象强制转换为基元类型

double d = (double) obj;
你可以将一个对象投射到一个双精度物体上

Double d = (Double) obj;
注意,如果对象不是Double,它可能抛出ClassCastException 同样值得一提的是,如果您被迫使用1.5之前的旧Java版本,并且您正在尝试使用集合,那么您将无法使用诸如
Double
之类的类型参数化集合。

在添加新项时,您必须通过解析和强制转换,手动将“box”添加到类
Double
,并将“unbox”添加到基元
Double
,操作如下:

LinkedList lameOldList=新建LinkedList();
添加(新的双精度(1.2));
lameOldList.add(新的双精度(3.4));
添加(新的双精度(5.6));
双倍合计=0.0;
for(int i=0,len=lameOldList.size();i

旧学校列表将只包含类型
对象
,因此必须转换为



此外,在早期的Java版本中,您将无法使用增强的for循环遍历列表——只能使用for循环。

如果您的对象表示一个数字,例如整数,您可以将其强制转换为一个数字,然后调用doubleValue()方法


尝试了所有这些转换方法->


我试过这个,它成功了:

Object obj = 10;
String str = obj.toString(); 
double d = Double.valueOf(str).doubleValue();

您的对象的特殊类型是什么?它实际上是一个双精度的,还是别的什么?什么是对象?它是一个未知类还是一个被键入到对象的双重类。“我试图找到,但一切似乎都很模糊。”-你的问题太模糊了,无法得到明显的答案。请详细说明。什么是“对象o”以及意图是什么?你是说“1.5之前”吗?这就是泛型和自动装箱被引入的地方。或者你的意思是什么?哎呀,你是对的@AlexeyRomanov,我已经编辑了我的答案来反映这一点。Double.valueOf(object.toString())当对象的类型为值类型时,使用较少的内存非常有用。如果对象可以是双精度或整数,那么在这种情况下,我们应该选择什么?@Raj Saraogi:double和integer都实现
java.lang.Number
。基本类型没有等价物。
Double asDouble(Object o) {
    Double val = null;
    if (o instanceof Number) {
        val = ((Number) o).doubleValue();
    }
    return val;
}
    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
}
Object obj = 10;
String str = obj.toString(); 
double d = Double.valueOf(str).doubleValue();