【问题标题】:Java autoboxing ValueOf(String)Java 自动装箱 ValueOf(String)
【发布时间】:2013-02-11 22:23:02
【问题描述】:

你觉得下面这行代码怎么样?:

 String s= "10.0";
  float f = Float.valueOf(s).floatValue();//1

有必要吗?为什么使用这样的语法比使用更好:

float f = Float.valueOf(s);//2

利用自动装箱功能仍然可以得到相同的结果。

简而言之,我的问题是:为什么要选择第一种语法而不是第二种?它们完全一样吗?

【问题讨论】:

    标签: java string int boxing value-of


    【解决方案1】:

    简而言之,我的问题是:为什么要选择第一种语法 而不是第二个?它们完全一样吗?

    好吧,我不会使用它们,因为它们都会生成中间的Float 对象,这几乎总是不需要的。无论在哪里需要它,我们都会让它与拳击一起使用。

    现在,您应该只使用Float.parseFloat(String) 方法,它会生成一个原始浮点数。


    就相似性而言,不,它们并不完全相同。第二个涉及从Floatfloatauto-unboxing,而第一种情况下没有unboxing。它使用给定的方法进行转换。

    【讨论】:

    • 在垃圾回收方面,还是首选第二个(Float.valueOf(s))而不是(Float.valueOf(s).floatValue()。后一个创建一个匿名对象堆,而前一个虽然没有使用拆箱。哪个更有效?我知道它更好 parseFloat(String) 但是如果我必须在 2 之间进行选择,你会建议什么?(在垃圾收集方面也是如此) 在此先感谢
    • @Rollerball。不,在这两种情况下,您都在创建一个对象,正如我在回答中所说的那样。 Float.valueOf 方法返回 new Float()。因此只在那里创建一个对象。因此,基于垃圾回收的比较没有意义。
    • @Rollerball。如果你强迫我只从前两个中选择(我会为此诅咒你),我会选择第二个,并使用自动拆箱,并且不会手动执行该任务。
    【解决方案2】:

    不同的是第一个显式转换为浮点数,
    而第二个让它出箱。

    在 Java 1.3 上自动装箱不可用!

    此外,在某些情况下,自动装箱会产生不需要的结果。
    对于自动装箱失败的情况:请参阅

    Josh Bloch:有效的 Java 第二版

    【讨论】:

      【解决方案3】:

      f = Float.valueOf(s);

      自动装箱功能是在 Java 5 之后引入的。这段代码在 Java 的早期版本中编译时会报错。

      【讨论】:

        猜你喜欢
        • 2011-01-19
        • 2011-05-02
        • 1970-01-01
        • 1970-01-01
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多