一、文档说明
本文档记录了'输出对象时报 NullPointerException、输出属性不报错'问题的背景、根因、解决方法及验证步骤,适用于同类跨 JDK 版本兼容性问题的参考,可供开发人员排查故障、沉淀技术经验使用。
二、问题背景
2.1 现象描述
- 业务场景:输出自定义用户对象时,触发
java.lang.NullPointerException异常;单独输出对象的非日期类属性(如userId、email、nickName等)时,无任何报错,属性值正常展示。 - 版本关联:
toString()方法未做任何代码改动,在高版本 JDK(如 JDK 11+/JDK 8u200+)环境中测试无异常,切换至低版本 JDK(如 JDK 8u100-/JDK 7)后,首次出现该空指针异常。 - 核心特征:异常仅在输出整个对象时触发,且与 JDK 版本切换强相关,代码逻辑无变更。
2.2 问题代码(异常版)
@Override public String toString() {
return "用户 ID:" + (userId == null ? "空" : userId) + ",邮箱:" + (email == null ? "空" : email) + ",昵称:" + (nickName == null ? "空" : nickName) + ",0:直接加 1:同意后加好友:" + (joinType == null ? "空" : joinType) + ",性别 0 女 1 男:" + (sex == null ? "空" : sex) + ",密码:" + (password == null ? "空" : password) + ",个性签名:" + (personalSignature == null ? "空" : personalSignature) + ",状态:" + (status == null ? "空" : status) + ",创建时间:" + (DateUtils.format(createTime, DateTimePatternEnum.YYYY_MM_DD_HH_MM_SS.getPattern()) == null ? "空" : DateUtils.format(createTime, DateTimePatternEnum.YYYY_MM_DD_HH_MM_SS.getPattern())) + ",最后登录时间:" + (DateUtils.format(lastLoginTime, DateTimePatternEnum.YYYY_MM_DD_HH_MM_SS.getPattern()) == ? : DateUtils.format(lastLoginTime, DateTimePatternEnum.YYYY_MM_DD_HH_MM_SS.getPattern())) + + (areaName == ? : areaName) + + (areaCode == ? : areaCode) + + (lastOffTime == ? : lastOffTime);
}

