Byte.decode ("10") и Byte.valueOf ("10") - в чем разница? - PullRequest
3 голосов
/ 13 января 2010

Оболочки примитивного типа API Java 6 имеют пары статических методов decode (String s) и valueOf (String s) . Оба они возвращают новый объект типа класса-оболочки, и ни один из них не помечается как устаревший. Кто-нибудь знает разницу между ними? Например:

Byte b1 = Byte.decode("10");

и

Byte b2 = Byte.valueOf("10");

Ответы [ 2 ]

6 голосов
/ 13 января 2010

Согласно документации (http://java.sun.com/javase/6/docs/api/java/lang/Byte.html#valueOf%28java.lang.String%29), valueOf принимает только строки, которые могут быть интерпретированы как десятичные значения со знаком, в то время как decode принимает десятичные, шестнадцатеричные или восьмеричные строки (с префиксом 0x, # или 0 ) - хотя valueOf перегружен, чтобы также явно воспринимать основание.

4 голосов
/ 13 января 2010

Метод декодирования позволяет вам указать основание (шестнадцатеричное, восьмеричное) в самой строке, используя "0x", "0X" или "#" для шестнадцатеричного значения и "0" в качестве префикса для восьмеричных чисел, тогда как значениеOO позволяет вам передать основание как число (например, 8 или 16) в качестве необязательного параметра. decode («0x10») эквивалентно значениюOf («10», 16). Ваш пример valueOf ("0x10") завершится с ошибкой NumberFormatException.

...