Java中Scanner输入字符串与字面量用==比较不匹配的问题
问题分析及解决方法
你的问题核心出在Java字符串比较的方式上,同时代码里还有几个细节问题:
1. == 不能用来比较字符串内容
在Java中,==运算符比较的是两个字符串对象的内存引用地址,而非字符串的实际内容。只有当两个字符串指向内存中同一个对象时(比如字符串常量池里的相同常量),==才会返回true。但通过Scanner.nextLine()获取的输入字符串,是在堆内存中新建的对象,和你写的"1"、"2"这些字符串常量的引用地址完全不同,所以用==比较永远不会相等。
正确的做法是使用String.equals()方法比较字符串内容,示例:
if(input.equals("1"))
如果需要忽略大小写(此场景不需要,但可作为拓展),可以用input.equalsIgnoreCase("1")。
2. 代码里的其他错误
- 第一个
if条件写的是input == "1\n",这里的字符串包含换行符,但用户输入1后按回车,nextLine()只会返回回车前的内容(即"1"),不会包含换行符,导致这个条件永远无法触发。 - 循环条件里的
input != "3"同样犯了用==比较的错误,应改为!input.equals("3")。
修改后的核心代码片段
do{ input = scan.nextLine().trim(); // 用trim()过滤输入前后的空格、换行符,避免误判 if(input.equals("1")){ System.out.print("Title: "); input2 = scan.nextLine(); System.out.print("Description: "); input3 = scan.nextLine(); } else if(input.equals("2")){ System.out.println("You press 2"); } else if(input.equals("3")){ break; // 可直接跳出循环,或保留while条件判断 } else { System.err.println("Invalid Input."); } System.out.println(input); }while(!input.equals("3"));
建议给输入加上trim()方法,能过滤用户输入时不小心带入的空格、制表符等,避免因额外字符导致比较失败。
内容的提问来源于stack exchange,提问作者Rin
相关产品推荐
相关产品推荐

