为什么这段Java代码中尝试赋值后Plant对象仍然为null?
问题排查方案
- 先确认读取到的
type实际编码值:你当前只打印了type的字符展示效果,无法区分看起来相同但编码不同的字符(比如全角小写p和半角小写p视觉完全一致,但编码值不同),新增一行代码打印字符的ASCII值验证:
char type = typeStr.charAt(0); // 新增该行排查问题 System.out.println("type字符的编码值为:" + (int)type);
半角小写p的编码值为112,如果输出值不符,说明读取到的不是预期的半角小写p,对应修复方案:
- 如果是全角字符问题,修改文件内容为半角字符,或者修改判断条件匹配全角字符即可
- 如果是不可见字符问题,调用
trim()处理typeStr后再取首字符:char type = typeStr.trim().charAt(0); - 确认字段读取顺序和文件内容一致:检查文件每行的字段顺序是否严格匹配你读取的顺序:
名称->类型标识->养分值,顺序错位会导致typeStr实际读取到其他字段的内容,自然无法命中判断条件 - 新增兜底逻辑避免空指针:当前代码如果type不匹配三个枚举值,
tempPlant会是null,执行addPlant时大概率触发空指针异常,建议新增异常分支提示:
} else { throw new IllegalArgumentException("不支持的植物类型:" + type); }
- 可选优化:如果类型标识本身就是单个字符的字符串,可以直接用字符串匹配,规避首字符读取异常的问题:
if ("p".equals(typeStr.trim())) { tempPlant = new Puffs(name, nutrients); } else if ("b".equals(typeStr.trim())) { tempPlant = new Parabush(name, nutrients); } else if ("d".equals(typeStr.trim())) { tempPlant = new Deltatree(name, nutrients); }
内容的提问来源于stack exchange,提问作者user15974810
相关产品推荐
相关产品推荐

