用Java写一个用户注册的界面,用到了两个JPasswordField:password和cfmPassword,用来输入密码和确认密码,但当比较两个密码是否相等时出了问题:if(new String(password.getPassword()).equals(new String(cfmPassword.getPassword()))) {
    //此时输入相同的内容,比较结果为true
}但如果直接比较,就不行:if(password.getPassword().equals(cfmPassword.getPassword())) {
    //比较结果为false
}既然Java中数组是类,那么为什么内容相同的两个字符数组用equals比较的结果反而不同呢?

解决方案 »

  1.   

    java 数组比较其实相当于==,比较的是地址
      

  2.   

    1>. password.getPassword() 和cfmPassword.getPassword()返回的都是String 对象,不是数组
    2>. String.equals()方法重写了,比较字符串的值。
    3>. 你确定password.getPassword().equals(cfmPassword.getPassword())是false吗? 两个都应该返回true
      

  3.   

    我查了jdk的文档,password.getPassword()返回的是char[]数组,并且两个密码一样但password.getPassword().equals(cfmPassword.getPassword())就是false.
      

  4.   

    嘿嘿JPassword返回类型比较诡异  为什么会返回char[]数组
      

  5.   

    不好意思,确实是返回char[]数组,这样问题就好解决了if(new String(password.getPassword()).equals(new String(cfmPassword.getPassword()))) {
        //true
    }
    这个char[]数组内容一样,String.equals()就是比较具体字符串的值
    if(password.getPassword().equals(cfmPassword.getPassword())) {
        //false
    }
    char[] 数组没有重写Object的equals方法,所以它比较的是引用地址,这里就返回false了
    你可以自己试下下面代码:
              char[] pwd = {'a', 'b', 'c'};
            char[] cfmPwd = {'a', 'b', 'c'};
            System.err.println(new String(pwd).equals(new String(cfmPwd)));
            System.err.println(pwd.equals(cfmPwd));
       
      

  6.   

    学习 LZ提供的代码运行了一下,跟LZ说的一样