我看到了四種替代方法,用於將char
轉換爲Java中的Stirng
。Java中最快的字符串轉換
v = Something.lookup(new String((char)binaryData[idx])); // SORRY! Wrong.
v = Something.lookup("" + (char)binaryData[idx]);
v = Something.lookup(String.valueOf((char)binaryData[idx]));
v = Something.lookup(Character.toString((char)binaryData[idx])));
我認爲第一個是最慢的。第二個非常方便。我推測第三個可能會返回以前創建的String
實例,但我不確定,API文檔沒有這樣說。選項四也是如此。實例的重用將非常幸運,因爲然後基於散列的查找可以利用String
中的hashCode()
高速緩存。 (哪些功能在API文檔中也沒有描述,但很多人告訴我)。
我來自C++,我覺得缺乏複雜性信息令人不安。 :-)我的猜測是否正確?我們是否有任何形式的官方文檔,在其中聲明瞭性能保證和緩存機制?
「第二個非常方便」 - 不是如果你想讀代碼,國際海事組織。該代碼使用字符串連接和一個空字符串,這兩者都不是你真正想實現的一部分。 'String.valueOf'一路,海事組織 - 並且你*測量了*這些中的任何一個?你知道嗎,這實際上是代碼中的瓶頸?你有沒有嘗試確定'String.valueof' *是否緩存這些值? (很容易分辨......)假設'binaryData'是一個'byte []',你可以很容易地用256個字符串構建你自己的'String []',以絕對保證緩存...... – 2015-03-25 10:28:40
3和4同樣的..暗含地調用3 :)。我們還沒有一個String構造函數,它只接受一個字符(case-1?) – TheLostMind 2015-03-25 10:30:58
版本2將由編譯器翻譯爲:創建一個StringBuilder對象,然後將char添加到該對象,最後toString()將被調用。所以這相當昂貴。對於v3或v4的成本...你可以看看源代碼,看看會發生什麼。 – GhostCat 2015-03-25 10:32:12