Java中String转基本类型须用parseXxx()并严格预处理、捕获异常、校验范围;转包装类优先valueOf()但需trim();boolean/char等特殊类型需单独处理;基本类型转String统一用String.valueOf()最安全。

Java 中 String 转基本类型或包装类,没有“一招通用”的安全写法,必须区分目标类型、预处理输入、捕获异常、校验范围——否则极易抛 NumberFormatException 或 NullPointerException,甚至静默出错。
转基本类型:用 parseXxx() + 严格预处理
每个数字型包装类都提供 parseXxx(String) 方法(如 Integer.parseInt()、Double.parseDouble()),它们返回原始值,适合后续计算。但这些方法对非法输入零容忍:
- 传入
null→ 抛NullPointerException - 空字符串
""或仅空白(如"\t \n")→ 抛NumberFormatException - 含非数字字符(如
"12a"、"-abc")→ 同样抛异常 -
Integer.parseInt("2147483648")超出 int 范围 → 抛异常,不截断
安全做法是:先判空去空格,再 try-catch,必要时加范围校验。
示例:
立即学习“Java免费学习笔记(深入)”;
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
String s = " 123 ";
int value;
if (s == null || s.trim().isEmpty()) {
value = 0; // 默认值
} else {
try {
value = Integer.parseInt(s.trim());
// 可选:校验是否在业务允许范围内,如 >= 0
} catch (NumberFormatException e) {
value = 0;
}
}
转包装类:优先用 valueOf(),但要 trim
valueOf(String) 返回包装对象(如 Integer、Double),语义更清晰,且对小整数有缓存优化(-128 到 127)。但它和 parseXxx() 一样,不自动处理空白:
-
Integer.valueOf(" 42 ")→ 直接抛NumberFormatException -
Integer.valueOf(null)→ 抛NullPointerException -
Double.valueOf("NaN")→ 返回Double.NaN,不抛异常;但"nan"小写会失败
所以仍需 trim() + try-catch:
String s = " -5.67 ";
Double d;
try {
d = Double.valueOf(s.trim());
} catch (NumberFormatException e) {
d = 0.0;
}
特殊类型要单独处理
不是所有基本类型都能靠 parseXxx() 一键搞定:
-
boolean:
Boolean.parseBoolean("true")只认全小写"true",其余一律返回false(不抛异常)。若需严格校验,应手动比对:"true".equalsIgnoreCase(s) -
char:没有
Character.parseChar()。必须确保字符串长度为 1:s != null && s.length() == 1 ? s.charAt(0) : throw new IllegalArgumentException() -
long / short / byte / float:对应
Long.parseLong()等,同样需预处理与异常捕获;注意Short.parseShort("32768")会溢出
基本类型转 String:无脑用 String.valueOf()
这是最安全、最统一的方式:
-
String.valueOf(123)→"123"(调用重载,无装箱) -
String.valueOf(null)→ 字符串"null"(不抛 NPE) -
String.valueOf(true)→"true" - 优于
"" + x(隐式 StringBuilder 开销)和x.toString()(x 为 null 时崩溃)
不需要额外判空,也不依赖自动装箱,语义明确,性能可控。

















