【问题标题】:What is the difference between Double.parseDouble(String) and Double.valueOf(String)?Double.parseDouble(String) 和 Double.valueOf(String) 有什么区别?
【发布时间】:2012-05-21 14:23:39
【问题描述】:

我想将String 转换为Double 数据类型。我不知道我应该使用parseDouble 还是valueOf

这两种方法有什么区别?

【问题讨论】:

    标签: java type-conversion


    【解决方案1】:

    parseDouble 返回一个包含字符串值的原始双精度:

    返回一个新的 double,初始化为指定 String 表示的值,由 Double 类的 valueOf 方法执行。

    valueOf 返回一个 Double 实例,如果已经缓存,你会得到相同的缓存实例。

    返回一个表示指定双精度值的 Double 实例。如果 不需要一个新的 Double 实例,这个方法一般应该是 优先于构造函数 Double(double) 使用,因为此方法 可能会产生显着更好的空间和时间性能 缓存频繁请求的值。

    为避免创建新的 Double 对象实例的开销,您通常应该使用valueOf

    【讨论】:

    • 正如你所说,我认为 parseDouble() 是首选。为什么是 valueOf()?
    • 如果你想要一个原语——你通常会这样做——然后更喜欢parseDoublevalueOf 仅在您想要盒装 Double 时才首选。
    • 补充@LouisWasserman 所说的,如果你不知道他所说的盒装替身是什么意思,他指的是自动装箱和拆箱。你可以在这里阅读:docs.oracle.com/javase/tutorial/java/data/autoboxing.html
    • OP 询问“Double.valueOf(string)”,但您的回答是“valueOf(double)”。
    • 在常用的 JVM(例如 OpenJDK 和 Oracle JDK)中,Double.valueOf(...) 确实缓存频繁请求的值。 (要确认这一点,请尝试运行assert Double.valueOf(1) == Double.valueOf(1);)因此建议人们使用valueOf“以避免创建新的Double 对象实例的开销”确实没有抓住重点。正如其他人所指出的,重要的问题是拳击。如果您需要double,请使用parseDouble。如果您需要Double,请使用valueOf
    【解决方案2】:

    Double.parseDouble(String) 将返回一个原始的double 类型。 Double.valueOf(String) 将返回一个 Double 类型的包装对象。

    所以,例如:

    double d = Double.parseDouble("1");
    
    Double d = Double.valueOf("1");
    

    此外,valueOf(...) 是一个重载方法。它有两种变体:

    1. Double valueOf(String s)
    2. Double valueOf(double d)

    parseDouble 是具有以下签名的单一方法:

    1. double parseDouble(String s)

    【讨论】:

      【解决方案3】:

      parseDouble() 方法用于初始化一个字符串(应该包含一些数值)......它返回的值是原始数据类型,如 int、float 等。

      但是 valueOf() 创建了一个 Wrapper 类的对象。您必须打开它才能获得双精度值。它可以与巧克力相提并论。制造商用一些箔纸或纸包裹巧克力以防止污染。用户拿起巧克力,取下并扔掉包装纸然后吃掉。

      观察以下转换。

      int k = 100; Integer it1 = new Integer(k);

      int 数据类型 k 被转换成一个对象,it1 使用 Integer 类。 it1 对象可用于 Java 编程中任何需要 k 的对象。

      以下代码可用于解包(从 Integer 对象中取回 int)对象 it1。

      int m = it1.intValue();
      

      System.out.println(m*m); // 打印 10000

      //intValue()是Integer类的一个方法,返回一个int数据类型。

      【讨论】:

        【解决方案4】:

        它们都将 String 转换为 double 值,但是 parseDouble() 方法返回原始 double 值,而 valueOf() 方法进一步将原始 double 转换为包含原始 double 值的 Double 包装类对象。

        如果 String 中的值不能转换为原始 double,则从 String 转换为原始 double 可能会引发 NFE(NumberFormatException)。

        【讨论】:

          【解决方案5】:

          parseDouble() 的文档说“返回一个新的 double,初始化为指定 String 表示的值,由 Double 类的 valueOf 方法执行。”,所以它们应该是相同的。

          【讨论】:

            【解决方案6】:

            如果要将字符串转换为双精度数据类型,那么大多数选择 parseDouble() 方法。 见示例代码:

            String str = "123.67";
            double d = parseDouble(str);
            

            你会得到双倍的价值。请参阅tutorialData 上的 StringToDouble 教程。

            【讨论】:

            • 那么 valueOf() 方法呢?
            • 返回一个 Double 对象,其中包含参数字符串 s 表示的双精度值。
            猜你喜欢
            • 2018-07-06
            • 1970-01-01
            • 2016-03-26
            • 2016-11-09
            • 2021-12-21
            • 2011-10-25
            • 2019-02-05
            相关资源
            最近更新 更多