Java 6 API原語類型包裝具有靜態方法對decode(String s)和valueOf(String s)。它們都返回包裝類類型的新對象,並且它們都不被註釋爲已棄用。有人知道他們之間的區別嗎?例如:Byte.decode(「10」)和Byte.valueOf(「10」) - 有什麼區別?
Byte b1 = Byte.decode("10");
和
Byte b2 = Byte.valueOf("10");
Java 6 API原語類型包裝具有靜態方法對decode(String s)和valueOf(String s)。它們都返回包裝類類型的新對象,並且它們都不被註釋爲已棄用。有人知道他們之間的區別嗎?例如:Byte.decode(「10」)和Byte.valueOf(「10」) - 有什麼區別?
Byte b1 = Byte.decode("10");
和
Byte b2 = Byte.valueOf("10");
根據文檔(http://java.sun.com/javase/6/docs/api/java/lang/Byte.html#valueOf%28java.lang.String%29),valueOf
只需要其可以被解釋爲有符號十進制值的字符串,而decode
採用十進制,十六進制或八進制字符串(以0x,#或0爲前綴) - 雖然valueOf
被重載以明確地取其基數。
解碼方法允許您在字符串本身指定基數(十六進制,八進制),使用「0x」,「0X」或「#」表示十六進制數,「0」表示八進制數的前綴,而valueOf允許您將基數作爲數字(例如8或16)作爲可選參數傳遞。解碼(「0x10」)等價於valueOf(「10」,16)。您的示例valueOf(「0x10」)將因NumberFormatException失敗。
這給出'有趣'的結果,就像解析0填充值'09' – Salandur 2010-01-13 20:28:55
如果你知道前導0表示一個八進制字符串,那就不那麼有趣了。 – danben 2010-01-13 20:30:43
0填充表示由Java語言規範定義的八進制。 – 2010-01-13 21:00:36