目录
2. 包装类中的 valueOf()(如 Integer、Double 等)
valueOf() 是 Java 中常见的方法,通常用于类型转换或对象创建。它的具体行为取决于调用的类,不同类中的 valueOf() 方法作用不同。以下是常见用法和场景:
1. String 类中的 valueOf()
- 作用:将其他类型(如 int、boolean、Object 等)转换为字符串。
- 示例:
int num = 123;
String str1 = String.valueOf(num); // 将 int 转换为 "123"
boolean flag = true;
String str2 = String.valueOf(flag); // 将 boolean 转换为 "true"
Object obj = null;
String str3 = String.valueOf(obj); // 将 null 转换为 "null"(不会抛空指针异常)
2. 包装类中的 valueOf()(如 Integer、Double 等)
- 作用:将基本类型或字符串转换为对应的包装类对象。
- 示例:
// 将字符串转换为 Integer 对象
Integer integer = Integer.valueOf("100");
// 将 int 转换为 Integer 对象(自动装箱)
Integer num = Integer.valueOf(200);
// 将字符串转换为 Double 对象
Double doubleValue = Double.valueOf("3.14");
注意事项:
- 如果字符串无法解析(如 Integer.valueOf("abc")),会抛出 NumberFormatException。
- 包装类的 valueOf() 会缓存常用值(例如 Integer.valueOf(127) 会返回缓存对象)。
3. 枚举(Enum)中的 valueOf()
- 作用:根据字符串名称返回对应的枚举常量。
- 示例:
enum Color { RED, GREEN, BLUE }
Color red = Color.valueOf("RED"); // 返回 Color.RED
注意事项:
- 如果字符串不匹配枚举常量(如 Color.valueOf("YELLOW")),会抛IllegalArgumentException。
4. 自定义类中的 valueOf()
- 开发者可以自定义 valueOf() 方法,实现特定类型的转换逻辑。
- 示例:
public class Person {
private String name;
public static Person valueOf(String name) {
Person person = new Person();
person.setName(name);
return person;
}
}
// 使用自定义 valueOf()
Person p = Person.valueOf("Alice");
常见问题与陷阱:
1. valueOf() vs parseXxx()
- Integer.valueOf("123") 返回 Integer 对象。
- Integer.parseInt("123") 返回 int 基本类型。
- 优先使用 parseXxx() 如果只需基本类型(性能更优)。
2. 空指针问题:
String s = null;
String.valueOf(s); // 返回 "null" 字符串
s.toString(); // 抛出 NullPointerException
5. 总结
- String.valueOf():万能类型转字符串,安全处理 null。
- 包装类的 valueOf():字符串或基本类型转包装类对象。
- 枚举的 valueOf():字符串转枚举常量。
- 自定义 valueOf():按需定义对象创建逻辑。