Java使用JOptionPane获取用户名时If判断恒执行else的问题咨询
问题核心
你写的判断逻辑完全失效,根源是对Java中字符串相等判断的规则理解出错:
- 对于
String这类引用数据类型,==运算符的作用是对比两个变量指向的内存地址是否相同,不会对比字符串存储的实际文本内容。 - 你的代码中,
user是JOptionPane.showInputDialog()运行时动态返回的字符串对象,和代码里硬编码的字符串常量"admin"的内存地址并不一致——哪怕你输入的文本完全是admin,user == "admin"的判断结果永远为false,因此程序永远会走到else分支输出test。 - 额外提示:代码中导入的
java.util.Scanner类全程未被使用,属于无效冗余导入。
修正方案
判断两个字符串的文本内容是否相等,必须使用String类提供的equals()方法。为了避免用户点击输入框“取消”按钮导致user为null时触发空指针异常,建议将常量字符串放在方法调用的前端,格式为"目标常量".equals(待判断变量)。
修正后的可运行代码:
import javax.swing.JOptionPane; public class Shipping { public static void main(String args[]) { String user = JOptionPane.showInputDialog("Please enter your username "); String pass = JOptionPane.showInputDialog("Please enter your password "); if ("admin".equals(user)) { System.out.println("admin"); } else { System.out.println("test"); } } }
补充说明:如果需要兼容用户输入不同大小写的场景(比如输入Admin、ADMIN也能匹配),可以用
equalsIgnoreCase()方法替换equals()。
内容的提问来源于stack exchange,提问作者Sag99
相关产品推荐
相关产品推荐

