与此类似的代码块引发了一些争论,即代码的哪一部分最有效,或者是否有更正确的方法来执行此操作。一个论点是,强制转换比创建要解析的字符串更有效。一个论点是多个类强制转换创建的对象多于创建要解析的字符串。
什么是“最佳做法”?
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());
}
答案 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来处理它。
作为旁注,第一部分的额外演员加倍是无关紧要的。