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

