String.valueOf() 和 toString() 都是 Java 中用于获取字符串表示的方法,但它们的使用场景和实现方式有所不同。以下是它们之间的主要区别:
1. 方法来源
String.valueOf(Object obj):
是 String 类的静态方法,接受一个对象作为参数。
如果传入的对象为 null,它会返回字符串 "null"。
toString():
是 Object 类的方法,所有 Java 类都继承自 Object,因此每个对象都有这个方法。
默认实现返回对象的类名和其哈希码(例如,ClassName@HashCode),通常需要在自定义类中重写这个方法以返回更具意义的字符串。
2. 处理 null 值
String.valueOf():
可以安全地处理 null 值,返回字符串 "null"。
示例:
java
String str = String.valueOf(null); // 返回 "null"
toString():
如果调用 toString() 方法的对象为 null,将抛出 NullPointerException。
示例:
java
Object obj = null;
String str = obj.toString(); // 抛出 NullPointerException
3. 使用场景
String.valueOf():
常用于需要将任意对象转换为字符串时,特别是在不确定对象是否为 null 的情况下。
toString():
通常在自定义对象的上下文中使用,以便提供该对象的合理字符串表示,通常在调试或日志输出时使用。
示例代码
java
public class Example {
public static void main(String[] args) {
Object obj = null;
// 使用 String.valueOf()
System.out.println(String.valueOf(obj)); // 输出 "null"
// 使用 toString()
try {
System.out.println(obj.toString()); // 会抛出 NullPointerException
} catch (NullPointerException e) {
System.out.println("Caught NullPointerException");
}
// 自定义对象
MyClass myObj = new MyClass();
System.out.println(myObj); // 调用 myObj.toString(),前提是重写了该方法
}
}
class MyClass {
@Override
public String toString() {
return "This is MyClass";
}
}
总结
使用 String.valueOf() 时,它能够安全地处理 null,并且是将对象转换为字符串的推荐方式。
使用 toString() 方法时,确保对象不是 null,并重写该方法以提供合适的字符串表示。