Java项目中ArrayList迭代查询App功能异常问题求助
问题分析与解决方案
嘿,我一眼就发现你这个searchApp方法的问题所在了——字符串比较用错了方式!
核心问题:== vs equals()的区别
在Java中,==运算符对于引用类型(比如String)来说,比较的是两个对象的内存地址,而不是它们的实际内容。也就是说,即使两个字符串的字符完全一样,只要它们是不同的String对象,==就会返回false。而你要做的是比较字符串的内容是否相等,这时候必须用String类的equals()方法。
修改后的代码
把原来的字符串比较逻辑替换成equals(),如果需要忽略大小写(比如用户输入"微信"和"WEIXIN"都能匹配),可以用equalsIgnoreCase()。另外,为了避免NullPointerException(比如app.getName()返回null的情况),推荐用Objects.equals()或者把已知非空的字符串放在前面:
import java.util.Objects; public App searchApp(String name) { System.out.println(list); for(App app: list) { String appName = app.getName(); // 方式1:用Objects.equals避免空指针风险 if(Objects.equals(appName, name)) { return app; } // 方式2:常规equals(需先判断appName非空) // if(appName != null && appName.equals(name)) { // return app; // } // 方式3:忽略大小写的匹配 // if(appName != null && appName.equalsIgnoreCase(name)) { // return app; // } } throw new IllegalStateException("未找到指定名称的App"); }
额外小提示
- 你原来打印
list的操作很实用,可以用来确认列表里确实存在目标App,排除列表为空或者数据初始化错误的情况。 - 如果不想抛出异常,也可以考虑返回
null(但要注意调用方需要处理空值逻辑),或者自定义更贴合业务场景的异常,让代码可读性更强。
内容的提问来源于stack exchange,提问作者Abhinay
相关产品推荐
相关产品推荐

