You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Java中可拼接null String却无法拼接null Character?

Java中null值字符串拼接无异常、包装类算术运算抛空指针的底层逻辑

1. 为什么String拼接null不会抛出空指针

Java语言规范中明确规定,字符串拼接运算符+在遇到引用类型的操作数时,会先将其转换为字符串再执行拼接,转换逻辑等价于调用String.valueOf(Object obj):

  • 当obj为null时,String.valueOf会直接返回字符串"null",不会调用对象的任何实例方法,因此不会触发空指针异常。

你的代码中nullString + "abcdefgh"会被编译器自动优化为类似以下逻辑:

new StringBuilder().append(nullString).append("abcdefgh").toString()

StringBuilder.append(Object)方法内部就是调用String.valueOf处理入参,自然就输出nullabcdefgh。

2. 为什么包装类相加会抛出空指针

Character、Integer这类都是基本类型的包装类,当包装类对象参与算术运算(+、-、*、/等)时,编译器会执行自动拆箱逻辑:把包装类对象转换为对应的基本类型,转换逻辑是调用包装类的实例方法,比如Character.charValue()、Integer.intValue()。

你的代码中nullCharacter + character的执行逻辑如下:

  1. 两个Character类型的操作数都要先自动拆箱为char基本类型
  2. 拆箱nullCharacter时,等价于执行null.charValue(),调用null对象的实例方法,直接触发空指针异常。

补充说明

如果包装类是和字符串执行+拼接,就不会触发空指针,因为此时+是字符串拼接运算符,走的是String.valueOf的逻辑:

System.out.println(nullCharacter + "abc"); // 输出nullabc,无异常

内容的提问来源于stack exchange,提问作者abc123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 07:54:07