Удобный метод 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, являются их собственными. |