哪个更有效的Object类转换或Double.parseDouble(String)

时间:2011-08-31 19:31:47

标签: java

与此类似的代码块引发了一些争论,即代码的哪一部分最有效,或者是否有更正确的方法来执行此操作。一个论点是,强制转换比创建要解析的字符串更有效。一个论点是多个类强制转换创建的对象多于创建要解析的字符串。

什么是“最佳做法”?

Object some_num_obj;
double some_num;
if(some_num_obj instanceof Integer)
{
    some_num = (double) (int) (Integer) some_num_obj;
}
else if(some_num_obj instanceof Double)
{
    some_num = (Double) some_num_obj;
}
else
{
     some_num = Double.parseDouble(some_num_obj.toString());
}

4 个答案:

答案 0 :(得分:5)

效率最高且可能最快的是使用Number.doubleValue和Double.parseDouble

if(some_num_obj instanceof Number)
    some_num = ((Number) some_num_obj).doubleValue();
else
    some_name = Double.parseDouble(some_num_obj.toString());

答案 1 :(得分:3)

最佳做法是最具可读性的做法。除非这段代码连续运行了数万次,否则效率差异就与不存在一样好。

不确定它是否适用于您的应用程序,您可能希望将java.lang.Number类视为方法参数。

答案 2 :(得分:2)

  

一个论点是多个类型的演员阵容创造了更多   对象

错误。类强制转换不会创建任何对象。

答案 3 :(得分:1)

类型只是告诉编译器如何处理变量的一种方式,它们不会创建新对象。从数字创建字符串并将字符串解析回数字都非常昂贵。铸造的唯一潜在问题是类型安全,您可以使用instanceof来处理它。

作为旁注,第一部分的额外演员加倍是无关紧要的。