我建議你測試。如果你需要這麼做很多次,但是如果你使用它們來創建數據,那麼這個操作相對昂貴,但可以比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