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

Java中使用==比较Scanner输入字符串与数组字符串恒返回false问题

问题根因
  • Java 中==运算符作用于引用类型(String属于引用类型)时,比较的是两个对象的内存地址,而非对象存储的内容。
  • 你代码中预定义在mois数组里的字符串属于字符串常量池中的对象,而Scanner.next()返回的用户输入字符串是堆上新创建的对象,哪怕二者内容完全相同,内存地址也不一致,因此==判断永远返回false。
修复方案

将indexString方法中字符串匹配的判断逻辑,改为调用String类的equals()方法比较内容即可,为了避免空指针异常,建议将数组中预存的字符串放在equals调用方:

int indexString(String needle, String [] search) {
    int index = -1;
    for (int i = 0; i < search.length; i++ ) {
        if (search[i].equals(needle)) {
            index = i;
            break;
        }
    }
    return index;
}
补充优化建议

当前代码如果用户输入不存在的月份,indexString会返回-1,直接作为数组下标访问jourParMois会触发ArrayIndexOutOfBoundsException异常,建议增加输入合法性判断:

int moisIndex = indexString(nomMois, mois);
if (moisIndex < 0) {
    System.out.println("输入的月份名称不符合要求,请输入无重音的小写法语月份名");
    return;
}
int nombreJour = jourParMois[moisIndex];

内容的提问来源于stack exchange,提问作者Quxntin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 06:39:02