在编写快速应用程序时,我注意到有两种方法可以将字符串转换为浮点数或整数。
Float f = new Float("0.0327f");
Float f = Float.parseFloat("0.0327f");
整数也存在类似的方法。 这两者有何不同?
检查它们的实现(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");
parseFloat
的float
结果将被框到Float
。装箱过程基本上会包装上一次调用,即。Float.valueOf(Float.parseFloat("0.0327f"))
和生成的Float
的引用将被分配给f
。
没有太大区别,第一个从输入字符串显式创建一个新的 Float,第二个也创建一个新的 Float,但通过自动装箱,因为 Float.parseFloat 返回原始浮点。在内部,两者都使用相同的机制来解析输入字符串。