在编写快速应用程序时,我注意到有两种方法可以将String转换为Float或Integer。
Float f = new Float("0.0327f");
Float f = Float.parseFloat("0.0327f");
Integers存在类似的方法。 这两者有何不同?
答案 0 :(得分:7)
检查它们的实现(Oracle JDK 7)
public Float(String s) throws NumberFormatException {
// REMIND: this is inefficient
this(valueOf(s).floatValue());
}
其中valueOf(String)
是
public static Float valueOf(String s) throws NumberFormatException {
return new Float(FloatingDecimal.readJavaFormatString(s).floatValue());
}
而parseFloat(String)
是
public static float parseFloat(String s) throws NumberFormatException {
return FloatingDecimal.readJavaFormatString(s).floatValue();
}
最后,生成Float
的两种方法是等效的。我说等效,因为在你的例子中,
Float f = Float.parseFloat("0.0327f");
float
的{{1}}结果将被设置为parseFloat
。 boxing process将基本上包裹前一个调用,即。 Float
生成的Float.valueOf(Float.parseFloat("0.0327f"))
引用将被分配到Float
。
答案 1 :(得分:0)
没有太大的区别,第一个显式地从输入字符串创建一个新的Float,第二个创建一个新的Float但是通过autoboxing,因为Float.parseFloat返回原始的float。在内部都使用相同的机制来解析输入字符串。