用Java写一个用户注册的界面,用到了两个JPasswordField:password和cfmPassword,用来输入密码和确认密码,但当比较两个密码是否相等时出了问题:if(new String(password.getPassword()).equals(new String(cfmPassword.getPassword()))) {
//此时输入相同的内容,比较结果为true
}但如果直接比较,就不行:if(password.getPassword().equals(cfmPassword.getPassword())) {
//比较结果为false
}既然Java中数组是类,那么为什么内容相同的两个字符数组用equals比较的结果反而不同呢?
//此时输入相同的内容,比较结果为true
}但如果直接比较,就不行:if(password.getPassword().equals(cfmPassword.getPassword())) {
//比较结果为false
}既然Java中数组是类,那么为什么内容相同的两个字符数组用equals比较的结果反而不同呢?
2>. String.equals()方法重写了,比较字符串的值。
3>. 你确定password.getPassword().equals(cfmPassword.getPassword())是false吗? 两个都应该返回true
//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));