Удобный метод String.valueOf (Object) существует с JDK 1.0 и является одним из предоставляемых JDK методов, которые я часто использую. Я уже писал в блоге о его стоимости . Класс Objects был представлен в JDK 1.7 и включал метод Objects.toString (Object) . В этом посте сравниваются эти два схожих метода.
Оба метода String.valueOf(Object) и Objects.toString(Object) сути делают одно и то же: вызывают метод toString () для переданного объекта, если он не равен null или возвращают строку «null», когда им передается значение null , Короче говоря, оба метода предназначены для обеспечения простого подхода к вызову объекта toString() не беспокоясь об исключении NullPointerException если оно оказалось null .
В таблице ниже сравниваются характеристики методов String.valueOf(Object) и Objects.toString(Object) .
| Характерная черта | String.valueOf(Object) |
Objects.toString(Object) |
|---|---|---|
| Java SE 10 Метод Javadoc | « Возвращает строковое представление аргумента Object. « | « Возвращает результат вызова toString для null аргумента и« null »для null аргумента. « |
| Java SE 10 Вернуться Javadoc | «Если аргумент равен null , то строка равна нулю»; в противном случае возвращается значение obj.toString() ». |
«Результат вызова toString для null аргумента и« null »для null аргумента» |
| Модификаторы метода | public static |
public static |
| Перегруженные версии | valueOf (булево) valueOf (символ) valueOf (char [], int, int) valueOf (двойной) valueOf ( с плавающей точкой) valueOf (INT) valueOf (длинный) valueOf (Объект) |
ToString (Объект) toString (Object, String) |
На String.valueOf(Object) кажется, что String.valueOf(Object) и Objects.toString(Object) делают одно и то же. Оказывается, они одинаковы. Вот код для Objects.toString(Object) из OpenJDK:
OpenJDK: определение Objects.toString(Object)
|
1
2
3
|
public static String toString(Object o) { return String.valueOf(o);} |
Приведенный выше фрагмент кода показывает, что метод Objects.toString(Object) просто делегирует String.valueOf(Object) . Реализация OpenJDK для String.valueOf(Object) показана далее.
OpenJDK: определение String.valueOf(Object)
|
1
2
3
|
public static String valueOf(Object obj) { return (obj == null) ? "null" : obj.toString();} |
Приведенные выше фрагменты кода показывают, что String.valueOf(Object) или Objects.toString(Object) можно вызывать, когда требуется представление объекта toString() без риска возникновения NullPointerException . Могут быть незначительные причины для предпочтения одного над другим, и я обычно выбираю прямой вызов String.valueOf(Object) косвенного вызова этого метода через Objects.toString(Object) .
Хотя я обычно использую String.valueOf(Object) [вместо Objects.toString(Object) ] по умолчанию, когда я хочу, чтобы строка «null» возвращалась, если переданный объект имеет значение null , альтернативный перегруженный метод Objects.toString (Object, Строка) имеет то преимущество, что позволяет указать любую строку, которая будет возвращена методом, если переданный объект является null . Так, например, можно использовать этот метод для возврата пустой строки ( "" ), строки «nil», строки «none» или любой другой произвольной строки, если переданный объект был null . Список кода OpenJDK для Objects.toString(Object, String) показан далее.
OpenJDK: определение Objects.toString(Object, String)
|
1
2
3
|
public static String toString(Object o, String nullDefault) { return (o != null) ? o.toString() : nullDefault;} |
В отношении реализации Objects.toString(Object, String) следует обратить внимание на Objects.toString(Object, String) что если в качестве второго аргумента в этот метод передается значение null этот метод будет возвращать null (а не строку «null» или любую другую строку) ,
Методы String.valueOf(Object) , Objects.toString(Object) и Objects.toString(Object, String) облегчают предоставление строковых представлений объектов без необходимости писать явные проверки на null .
| Опубликовано на Java Code Geeks с разрешения Дастина Маркса, партнера нашей программы JCG . См. Оригинальную статью здесь: String.valueOf (Object) и Objects.toString (Object).
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |