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

Java UserLogin登录程序输入正确用户名仍提示错误问题求助

问题排查结论

错误出在字符串相等判断的逻辑上:

  • Java中int是基本数据类型,用==/!=比较值是完全正确的,所以密码部分的判断逻辑没有问题。
  • String是引用类型,==/!=比较的是两个字符串对象的内存地址是否一致,不会比较字符串的实际内容。你通过Scanner.nextLine()读取到的用户输入是新创建的String对象,和代码里硬编码的"helloworld"常量虽然内容完全相同,但内存地址不一样,因此userName == sys_userName永远返回false,即使你输入了正确的用户名,也会走到用户名错误的分支。
修复方法

将所有字符串相等判断替换为String.equals()方法,该方法才是专门用来比较字符串内容是否一致的。为了避免用户输入为空时触发空指针异常,建议把固定的常量字符串放在equals()方法的调用侧。

修复后的完整代码如下:

import java.util.Scanner;

public class Main {
    
    public static void main (String[] args) {
        
        String userName, sys_userName = "helloworld";
        int passWord, sys_passWord = 12345;
        
        Scanner scan = new Scanner (System.in); 
        
        System.out.println("Enter username: ");
        userName = scan.nextLine();
        
        System.out.println("Enter password: ");
        passWord = scan.nextInt();
        
        // 替换字符串比较逻辑
        if (sys_userName.equals(userName) && passWord == sys_passWord) {
            System.out.println("Welcome!");
        }
        else if (!sys_userName.equals(userName) && passWord == sys_passWord) {
            System.out.println("Username is incorrect!");
        }
        else if (sys_userName.equals(userName) && passWord != sys_passWord) {
            System.out.println("Password is incorrect!");
        }
        else if (!sys_userName.equals(userName) && passWord != sys_passWord) {
            System.out.println("All infos are incorrect!");
        }
        
        scan.close();
    }
}

补充提示:如果需要做忽略大小写的用户名判断,可以用equalsIgnoreCase()方法替代equals()。

内容的提问来源于stack exchange,提问作者Abdullah Emin Tatar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.12 16:15:51