用字符串初始化 Float 或执行 parseFloat 有什么区别?



在编写快速应用程序时,我注意到有两种方法可以将字符串转换为浮点数或整数。

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");

parseFloatfloat结果将被框到Float。装箱过程基本上会包装上一次调用,即。Float.valueOf(Float.parseFloat("0.0327f"))和生成的Float的引用将被分配给f

没有太大区别,第一个从输入字符串显式创建一个新的 Float,第二个也创建一个新的 Float,但通过自动装箱,因为 Float.parseFloat 返回原始浮点。在内部,两者都使用相同的机制来解析输入字符串。

最新更新