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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 02:33:20