为何这段Java代码始终返回"False"?输入相同密码也无效
为什么输入正确密码时我的Java程序始终输出"false"?
嘿,这个问题我太熟了!我刚学Java的时候也犯过一模一样的错😅 核心问题出在你用来比较字符串的方式上——你用了==,但在Java里它可不是用来比较字符串内容的。
问题根源
Java中的==运算符比较的是两个对象的内存地址,而不是它们的实际内容。你通过Scanner获取的ps是一个新创建的字符串对象,即使它的内容和字面量"jalalkay"完全一样,这两个对象在内存里的地址是不同的,所以ps == "jalalkay"会返回false,程序自然就走到else分支输出"false"了。
解决方法
有两种常用的正确方式来比较字符串内容:
使用
equals()方法:这是Java字符串用来比较内容的标准方法。修改你的判断条件为:if("jalalkay".equals(ps))把字面量放在前面是个好习惯,这样即使
ps为null(比如用户没输入内容直接回车),也不会抛出NullPointerException。使用
Objects.equals()(Java 7+):这个方法会自动处理null的情况,无需担心空指针异常,不过需要导入java.util.Objects类:import java.util.Objects; // ... if(Objects.equals(ps, "jalalkay"))
修改后的完整代码
import java.util.Scanner; public class password2 { public static void main(String[] args) { Scanner pass = new Scanner(System.in); System.out.println("Type a password"); String ps = pass.nextLine(); // 改用equals方法比较字符串内容 if("jalalkay".equals(ps)){ System.out.println("true"); }else{ System.out.println("false"); } } }
内容的提问来源于stack exchange,提问作者Jalal rka
相关产品推荐
相关产品推荐

