你觉得下面的代码行?:Java的自动装箱的valueOf(字符串)
String s= "10.0";
float f = Float.valueOf(s).floatValue();//1
是否有必要呢?为什么使用这样的语法会比使用更好:
float f = Float.valueOf(s);//2
利用自动装箱功能它仍然给出相同的结果。
总之我的问题是:为什么要选择第一个语法而不是第二个语法?他们完全一样吗?
你觉得下面的代码行?:Java的自动装箱的valueOf(字符串)
String s= "10.0";
float f = Float.valueOf(s).floatValue();//1
是否有必要呢?为什么使用这样的语法会比使用更好:
float f = Float.valueOf(s);//2
利用自动装箱功能它仍然给出相同的结果。
总之我的问题是:为什么要选择第一个语法而不是第二个语法?他们完全一样吗?
总之,我的问题是:为什么应该选择第一个语法 而不是第二个?他们完全一样吗?
那么,我会使用他们两个,因为他们都会生成中间Float
对象,这几乎总是不需要。无论哪里需要,我们都会让它与拳击一起工作。
现在,您应该只使用Float.parseFloat(String)
方法,该方法会生成原始的float。
至于相似性而言,没有他们不是完全相同。第二个涉及auto-unboxing
从Float
到float
,而在第一种情况下没有unboxing
。它使用给定的方法进行转换。
区别在于第一个显式转换为浮点型,
,而第二个显示为outoboxed。
在Java 1.3自动装箱不可用!
此外,在某些情况下,自动装箱会产生不需要的结果。
对于在自动装箱失败的情况下:看到
乔希布洛赫:有效的Java第二版
f = Float.valueOf(s);
自动装箱功能是在Java 5之后引入的。在Java早期版本中编译时,此代码会给出错误。
就垃圾收集而言,它仍然是第二个(Float.valueOf(s))而不是(Float.valueOf(s).floatValue()的首选。后者在堆中创建一个匿名对象,而但是如果我不得不在2之间进行选择,你会有什么建议吗?(同样在垃圾回收方面)预先感谢 – Rollerball 2013-02-11 23:19:04
@Rollerball。不,在这两种情况下,你都在创建一个对象,就像我在我的答案中所说的那样:'Float.valueOf'方法返回'new Float()',因此只在那里创建一个对象。垃圾收集。 – 2013-02-11 23:23:29
@滚球。如果你强迫我从前两个选择(我会为此诅咒你),我会选择第二个,并使用自动拆箱,并且不会手动完成这项任务。 – 2013-02-11 23:25:19