简单的Java密码输入验证将不起作用

时间:2014-02-07 16:22:45

标签: java

我不知道它发生了什么。代码如下。我不是想让任何人为我编码整个事情,只是不知道什么是错的,并希望得到一些帮助

private void javabutton1(java.awt.event.ActionEvent evt) {
    String testa= new String (jPasswordField2.getPassword());
    String testb= new String (jPasswordField3.getPassword());
    if (testa.toString() == testb.toString()){
        JOptionPane.showMessageDialog(this, "Success");
    }
}

当我用“A”==“A”替换testa.toString()== testb.toString())时。 消息框“成功”已实现,但此条目比较不起作用

另外:在jPasswordField2和jPasswordField3中输入的文本都是相同的。

6 个答案:

答案 0 :(得分:1)

你应该尝试:

testa.equals(testb)

没有必要这样做:

String testa = getSomething();
String temp = testa.toString();
// becasue
testa.equals(temp) // always true

如果您有类似的话:

String a = getSomething();
String b = a;
a == b // now this is true, because they have the same reference/pointer

答案 1 :(得分:0)

比较字符串时使用.equals()。

答案 2 :(得分:0)

基本上,你绝不应该使用==比较字符串,而是使用equals(),所以对你:

testa.equals(testb)

区别在于==用于比较引用,它说:“这两个String引用是否指向内存中相同的String对象?”......由于Java存储字符串的方式,这是不可预测的,这基本上解释了为什么"A" == "A"返回true ...这里没有什么东西可以进入。

equals()方法更符合您的期望,在Java类String中,此方法基本上检查String中的每个字符是否相同,并返回true如果他们这样做。

如果它是一个对象,你应该使用equals()进行比较,如果它是一个原始数据类型,例如int(或者你正在检查一个引用是null)那么使用==

答案 3 :(得分:0)

尝试使用String.equals()

考虑两个不同的参考变量str1和str2

str1 = new String("abc");
str2 = new String("abc");

如果您使用equals()

System.out.println((str1.equals(str2))?"TRUE":"FALSE");

您将输出为TRUE

如果您使用==

System.out.println((str1==str2)?"TRUE":"FALSE");

现在你将得到FALSE作为输出,因为str1和str2都指向两个不同的对象,即使它们都共享相同的字符串内容。这是因为new String()每次创建一个新对象。

答案 4 :(得分:0)

使用String.equals(string)像这样

修复您的问题
String testa= new String (jPasswordField2.getPassword());
String testb= new String (jPasswordField3.getPassword());
    if (testa.equals(testb)){
         JOptionPane.showMessageDialog(this, "Success");
     }

答案 5 :(得分:0)

虽然我同意Takendarkk的回答重复问题可以促使他们重复发帖,但我认为至少有一个问题值得注意,但尚未提及。 StephenTG在评论中提出了一个尖锐的问题:“为什么你需要将你的字符串转换成字符串?”

给定变量的名称,如果您确实在使用swing JPasswordField,那么getPassword()方法将返回char[]数组。您无需将其转换为字符串,您可以使用java.utils.Arrays#equals(char[]. char[])比较它们以获得所需的结果。您的代码可能如下所示:

private void javabutton1(java.awt.event.ActionEvent evt) {
    char[] testa = jPasswordField2.getPassword();
    char[] testb = jPasswordField3.getPassword();
    if (Arrays.equals(testa, testb)){
        JOptionPane.showMessageDialog(this, "Success");
    }
}