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
相关产品推荐
相关产品推荐

