Статьи

String.valueOf (Object) и Objects.toString (Object)

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