Java中基本类型与包装类解析字符串的核心是parseXxx()和valueOf()方法:前者返回基本类型且严格校验格式,后者返回包装类对象并支持缓存;二者均抛NumberFormatException,但Boolean.parseBoolean()不抛异常。

parseXxx() 方法:直接返回基本类型
每个数值型包装类(Integer、Long、Short、Byte、Float、Double)都提供形如 parseInt()、parseDouble() 等静态方法。
- 返回值是对应的基本数据类型(
int、double等),不是对象 - 输入字符串必须严格符合格式,否则抛出
NumberFormatException - 不接受
null,也不接受前后空白(除非先 trim)
示例:
立即学习“Java免费学习笔记(深入)”;
int i = Integer.parseInt("123"); // ✅ 正确
double d = Double.parseDouble("3.14"); // ✅ 正确
boolean b = Boolean.parseBoolean("true"); // ✅ 特殊:不抛异常,但只识别 "true"(忽略大小写),其余全为 false
// Integer.parseInt(" 123 "); // ❌ 报 NumberFormatException(含空格)
// Integer.parseInt(null); // ❌ 报 NullPointerException
valueOf() 方法:返回包装类对象
valueOf(String) 是所有包装类都支持的静态工厂方法,返回的是包装类实例(即引用类型),而非基本类型。
- 内部通常先调用对应的
parseXxx(),再进行自动装箱(对数值类型)或缓存复用(如Integer.valueOf(100)可能返回常量池中已有对象) - 同样要求字符串格式合法,非法输入也抛
NumberFormatException - 支持
null判断(valueOf(null)会直接抛空指针)
示例:
立即学习“Java免费学习笔记(深入)”;
Integer i = Integer.valueOf("456"); // ✅ 返回 Integer 对象(可能来自缓存)
Float f = Float.valueOf("2.71f"); // ✅ 注意带 f 后缀也可识别
Boolean b = Boolean.valueOf("TRUE"); // ✅ 忽略大小写,返回 Boolean.TRUE 实例
Character 和 Boolean 的特殊性
Character 没有 parseCharacter(),也不能用 valueOf(String) 解析单字符字符串(如 "a")——它只支持 valueOf(char)。
- 若要从长度为 1 的字符串获取 char,需手动检查:
str.length() == 1 ? str.charAt(0) : throw ...
Boolean 的 parseBoolean() 和 valueOf() 行为不同:
-
Boolean.parseBoolean("false")→false;parseBoolean("anything else")→false(不抛异常) -
Boolean.valueOf("true")→Boolean.TRUE;valueOf("yes")→NumberFormatException
安全解析建议(避免崩溃)
生产代码中不建议裸调这些方法,应配合校验和异常处理:
- 提前判空:
if (str == null || str.trim().isEmpty()) { ... } - 使用 try-catch 捕获
NumberFormatException - 对整数范围敏感场景(如数据库 ID),注意
parseInt()不检查溢出,超限仍抛异常 - 需要默认值时可封装工具方法,例如:
safeParseInt(str, -1)


















