Java if增强for循环下的Statement不起作用

时间:2014-04-25 14:34:39

标签: java if-statement for-loop

这是我正在使用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");

        }

3 个答案:

答案 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_up_pwp_snString对象引用,下面的代码是检查这两个对象是否是同一个对象(或者它们是否重新引用对象在内存中的位置是相同的,而不是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()))

我希望这会有所帮助。