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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:16:57