Byte.decode(“10”)和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