Java if语句

Java if语句,java,if-statement,Java,If Statement,这个if语句有什么问题吗?我正在尝试创建一个swing登录系统???谢谢:) 是的password'是一个数组-对其进行等号是一个引用比较。将其转换为字符串,并在该字符串上执行相等操作 编辑:看起来这是“正确”的方式: 从。您可能需要 new String(password).equals("test") 相反。比较数组和字符串没有什么意义。字符[]不等于字符串。尝试从中创建一个字符串: new String(password).equals("test") 对。您检查密码的部分是错误的密码

这个if语句有什么问题吗?我正在尝试创建一个swing登录系统???谢谢:)


是的password'是一个数组-对其进行等号是一个引用比较。将其转换为字符串,并在该字符串上执行相等操作

编辑:看起来这是“正确”的方式:

从。

您可能需要

new String(password).equals("test")

相反。比较数组和字符串没有什么意义。

字符[]不等于字符串。尝试从中创建一个字符串:

new String(password).equals("test")

对。您检查密码的部分是错误的<代码>密码是一个
字符[]
。因此,您必须改变检查方式:

方式1:创建一个字符串

if (new String(password).equals("test"))
方式2:迭代数组并逐字符检查:

public boolean checkPassword(char[] pass, String correctPass)
{
    if (pass.length != correctPass.length()) return false;

    for (int i = 0; i < pass.length; i++)
    {
        if (pass[i] != correctPass.charAt(i)) return false;
    }
    return true;
}
将始终返回
false
,因为
test
作为字符串和
password
作为字符[]是不同的类。他们永远不可能平等

但是您可以使用,并通过检查数组的相等性 :

在现实生活中,您可能不会将密码设置为字符串,但已经设置为char[]。
当然,您可以直接在
数组中使用它#equals

您的需求实际上并不明确。这就是为什么不能判断它是否正确工作的原因。永远不要在源代码中硬编码一些用户名/密码,即使是出于测试目的。从生产代码中删除这些凭据的操作将被遗忘,因此,黑客可以使用默认登录名。你犯了17个与此问题无关的错误。谢谢你的购物。@Michael:如果有人想在没有密码的情况下进入程序,他只需在没有密码的情况下进入应用程序即可。硬编码与否。也许你应该看看逆向工程。如果我是对的,请看一看“另一个Java反编译器”。@Michael:除非你加密了应用程序的一部分。解密算法使用输入的密码…-1如果密码字段使用字符串作为密码是一个好主意,那么就不用麻烦使用字符数组了。@Pete Kirkham:解释一下,为什么字符串是一个糟糕的解决方案(除此之外,答案只建议转换数组进行检查)@Mnementh我所知道的唯一情况是在数据库中存储哈希密码:通常无法将它们转换为字符串。然而,这里的情况并非如此。-1如果密码字段使用字符串作为密码是个好主意,那么使用字符数组就不会麻烦了。我建议只将字符数组转换为字符串,不要更改输入字段。您还应该将字符数组归零。使用
数组会更简单。equals
@Pete-启发我。那为什么这是个坏主意?@Pete-也许你可以发布你的解决方案。因为看起来这里的每个人都错了@皮特-NM,我想我明白了。谢谢你的提醒。因为String类型的对象是不可变的——字符串的内容在使用后不能更改或覆盖
if (new String(password).equals("test"))
public boolean checkPassword(char[] pass, String correctPass)
{
    if (pass.length != correctPass.length()) return false;

    for (int i = 0; i < pass.length; i++)
    {
        if (pass[i] != correctPass.charAt(i)) return false;
    }
    return true;
}
if (checkPassword(password, "test"))
password.equals("test")
java.util.Arrays.equals(password,"test".toCharArray())