Есть небольшая разница. Используйте ту, которая короче и работает чаще.
Если вы действительно хотите, чтобы получить строковое значение объекта по другим причинам, и хотите, чтобы быть пустым дружественным, сделайте следующее:
String s = String.valueOf(obj);
Edit: Вопрос был расширен, так что я Я продолжу свой ответ.
В обоих случаях они компилировать что-то вроде следующего:
System.out.println(new StringBuilder().append("obj: ").append(obj).toString());
Когда toString()
подразумевается, вы увидите, что во втором Append.
Если вы посмотрите на исходный код на Java, вы увидите, что StringBuilder.append(Object)
выглядит следующим образом:
public StringBuilder append(Object obj) {
return append(String.valueOf(obj));
}
String.valueOf
где выглядит следующим образом:
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
Теперь, если вы сами toString()
, вы обходите нулевую проверку и фрейм стека и переходите прямо к этому в StringBuilder
:
public StringBuilder append(String str) {
super.append(str);
return this;
}
Итак, очень похожие вещи случаются в обоих случаях. Просто нужно немного поработать.
почему он предпочтительно использовать последнюю версию? спасибо – Bartzilla 2013-01-03 00:14:01