news 2026/6/13 10:44:41

使用switch ,Cannot invoke “String.hashCode()“ because “<local5>“ is null

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用switch ,Cannot invoke “String.hashCode()“ because “<local5>“ is null

这个错误是因为在使用switch语句时,传入的参数是null,而switch在内部会调用字符串的hashCode()方法导致的。这里有几种解决方案:

方案1:在 switch 前进行空值检查(推荐)

String str = getString(); // 可能返回 null if (str == null) { // 处理 null 的情况 handleNullCase(); return; } switch (str) { case "value1": // 处理 value1 break; case "value2": // 处理 value2 break; default: // 默认处理 }

方案2:使用 Objects.requireNonNull()

import java.util.Objects; String str = getString(); switch (Objects.requireNonNull(str, "字符串不能为null")) { case "value1": // 处理逻辑 break; // ... }

方案3:使用 switch 表达式(Java 14+)

String result = switch (str) { case null -> "值是null"; case "value1" -> "结果1"; case "value2" -> "结果2"; default -> "默认结果"; };

方案4:使用增强的 switch(Java 17+)

switch (str) { case null -> System.out.println("值为null"); case "value1" -> System.out.println("值1"); case "value2" -> System.out.println("值2"); default -> System.out.println("其他值"); }

方案5:完整示例

public class SwitchExample { public void processString(String input) { if (input == null) { System.out.println("输入为null,使用默认值"); input = "default"; } switch (input) { case "option1": System.out.println("选择了选项1"); break; case "option2": System.out.println("选择了选项2"); break; default: System.out.println("未知选项: " + input); } } // 或者使用 Optional public void processWithOptional(String input) { switch (Optional.ofNullable(input).orElse("default")) { case "option1": System.out.println("选项1"); break; // ... } } }

建议:

  1. Java 14+:使用 switch 表达式,可以直接处理case null

  2. Java 13 及以下:在 switch 前进行空值检查

  3. 始终考虑输入为 null 的情况,避免空指针异常

这样可以确保代码更加健壮,避免运行时异常。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 11:44:44

LeetDown降级工具终极指南:A6/A7设备完美解决方案

LeetDown降级工具终极指南:A6/A7设备完美解决方案 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown 还在为复杂的iOS设备降级而头疼吗?面对繁琐的命令行操作…

作者头像 李华
网站建设 2026/6/10 11:41:30

一键部署verl:5分钟搞定强化学习环境

一键部署verl:5分钟搞定强化学习环境 1. 为什么选择 verl? 你是不是也遇到过这样的问题:想用强化学习(RL)做 LLM 的后训练,但框架太复杂,配置动辄上百行,跑个 demo 都要半天&#…

作者头像 李华
网站建设 2026/6/10 1:08:08

统一数据访问平台设计方案 - DataHub

一、命名建议1. 整体平台命名DataHub Platform └── 符合Hub中心化的概念,强调这是数据的中枢平台2. 各数据中心API命名DataHub Global API (原UK) # 全球标准API DataHub China API (CN) # 中国区API DataHub India API (IN) # 印度区API3. 套壳平…

作者头像 李华
网站建设 2026/6/12 19:02:49

多说话人识别挑战:CAM++聚类应用扩展指南

多说话人识别挑战:CAM聚类应用扩展指南 1. 引言:为什么说话人识别越来越重要? 你有没有遇到过这样的场景:一段会议录音里有五六个人轮流发言,你想知道每个人说了什么,却分不清谁是谁?或者客服…

作者头像 李华
网站建设 2026/6/10 13:21:47

VibeThinker-1.5B教育科技案例:在线编程课AI助教系统

VibeThinker-1.5B教育科技案例:在线编程课AI助教系统 1. 小参数大能力:VibeThinker-1.5B为何适合教育场景? 你有没有遇到过这样的情况:学生在上在线编程课时,问题一个接一个,老师根本忙不过来&#xff1f…

作者头像 李华
网站建设 2026/6/10 19:29:59

SQL 注入实战全攻略:从零基础到精通的完整学习教程

手工SQL注入示例 一、联合查询注入(回显注入) 是一种结合数据库原始报错信息和union查询的注入方式 使用场景:数据库中查询的结果能够直接在前端页面中展示出来 UNION 操作符用于将两个或多个 SELECT 语句执行的结果合并为一个结果集输出…

作者头像 李华