2013-02-11 33 views
2

你觉得下面的代码行?:Java的自动装箱的valueOf(字符串)

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

是否有必要呢?为什么使用这样的语法会比使用更好:

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

利用自动装箱功能它仍然给出相同的结果。

总之我的问题是:为什么要选择第一个语法而不是第二个语法?他们完全一样吗?

回答

5

总之,我的问题是:为什么应该选择第一个语法 而不是第二个?他们完全一样吗?

那么,我会使用他们两个,因为他们都会生成中间Float对象,这几乎总是不需要。无论哪里需要,我们都会让它与拳击一起工作。

现在,您应该只使用Float.parseFloat(String)方法,该方法会生成原始的float。


至于相似性而言,没有他们不是完全相同。第二个涉及auto-unboxingFloatfloat,而在第一种情况下没有unboxing。它使用给定的方法进行转换。

+0

就垃圾收集而言,它仍然是第二个(Float.valueOf(s))而不是(Float.valueOf(s).floatValue()的首选。后者在堆中创建一个匿名对象,而但是如果我不得不在2之间进行选择,你会有什么建议吗?(同样在垃圾回收方面)预先感谢 – Rollerball 2013-02-11 23:19:04

+0

@Rollerball。不,在这两种情况下,你都在创建一个对象,就像我在我的答案中所说的那样:'Float.valueOf'方法返回'new Float()',因此只在那里创建一个对象。垃圾收集。 – 2013-02-11 23:23:29

+0

@滚球。如果你强迫我从前两个选择(我会为此诅咒你),我会选择第二个,并使用自动拆箱,并且不会手动完成这项任务。 – 2013-02-11 23:25:19

0

区别在于第一个显式转换为浮点型,
,而第二个显示为outoboxed。

在Java 1.3自动装箱不可用!

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

乔希布洛赫:有效的Java第二版

0

f = Float.valueOf(s);

自动装箱功能是在Java 5之后引入的。在Java早期版本中编译时,此代码会给出错误。