我建议你测试。如果你需要这么做很多次,但是如果你使用它们来创建数据,那么这个操作相对昂贵,但可以比Double.toString()或Integer.toString()更便宜。
我也建议你只使用double
,除非你知道使用float
永远不会导致舍入问题。 ;)
它和创建对象一样昂贵,比如String或向HashMap添加条目。除非你打算避免这样做,否则我不会担心。
编辑:于@Stackers'基准类似我会运行测试时间更长,使用nanoTime()
int runs = 10000000;
String val = "" + Math.PI;
long start = System.nanoTime();
for (int i = 0; i < runs; i++)
Float.parseFloat(val);
long time = (System.nanoTime() - start)/runs;
System.out.println("Average Float.parseFloat() time was " + time + " ns.");
long start2 = System.nanoTime();
for (int i = 0; i < runs; i++)
Double.parseDouble(val);
long time2 = (System.nanoTime() - start2)/runs;
System.out.println("Average Double.parseDouble() time was " + time2 + " ns.");
打印
Average Float.parseFloat() time was 474 ns.
Average Double.parseDouble() time was 431 ns.
BTW:我有函数读取从直接ByteBuffer双打这需要80纳秒。速度更快,因为它不需要字符串,也不会创建任何对象。然而,这样做并不是微不足道的,你必须设计你的核心系统来避免任何对象的创建。 )
你可以测量它吗? – 2011-04-05 08:18:34
您也可以使用Float.valueOf()而不是Float.parseFloat()它会提高性能,因为它使用简单的缓存。 – bvk256 2011-04-05 08:30:40
@ bvk256:Float.valueOf不执行任何缓存。 javadoc认为它确实如此,但是如果您查看源代码(至少在Sun JDK中),它不会。它只是一个新的例子。整数类型的valueOf方法可以做,但不是浮点类型。 – 2011-04-05 08:44:44