这是我正在使用hashset用户登录系统的代码片段。 我检查了增强的for循环部分它的工作原理但if语句似乎永远不会有效,即使值相等。
if (comm.equals("Sign in")) {
user urs = new user(p_name, p_pass, p_id );
Iterator<user> iter = Users.iterator();
for(user obj : Users) {
if (p_u == obj.getUsername()&& p_pw == obj.getPassword ()&& p_sn== obj.getStudentID()) {
JOptionPane.showConfirmDialog(
jf,
"Success", "Success",
JOptionPane.DEFAULT_OPTION);
break;
} else {
log_in.setText("Try Again");
exit.setText("Create User");
}
答案 0 :(得分:1)
请记住,在Java ==运算符中测试值的相等性,在本例中为两个引用。这两个引用不指向相同的内存位置,因此永远不会等同于true。使用equals()
方法测试字符串值的相等性。
答案 1 :(得分:1)
我认为您需要将其更改为以下内容:
if (comm.equals("Sign in")) {
user urs = new user(p_name, p_pass, p_id );
Iterator<user> iter = Users.iterator();
for(user obj : Users) {
if (p_u.equalsIgnoreCase(obj.getUsername())&& p_pw.equals(obj.getPassword())&& p_sn.equals(obj.getStudentID())) {
JOptionPane.showConfirmDialog(
jf,
"Success", "Success",
JOptionPane.DEFAULT_OPTION);
break;
} else {
log_in.setText("Try Again");
exit.setText("Create User");
}
答案 2 :(得分:0)
假设p_u
,p_pw
和p_sn
是String
对象引用,下面的代码是检查这两个对象是否是同一个对象(或者它们是否重新引用对象在内存中的位置是相同的,而不是String对象是否共享相同的字符序列。
if (p_u == obj.getUsername()&& p_pw == obj.getPassword ()&& p_sn== obj.getStudentID())
相反,要检查他们的字符序列是否匹配,您应该使用.equals()
方法。以下示例;
if (p_u.equals(obj.getUsername())&& p_pw.equals(obj.getPassword ())&& p_sn.equals(obj.getStudentID()))
我希望这会有所帮助。