我不知道它发生了什么。代码如下。我不是想让任何人为我编码整个事情,只是不知道什么是错的,并希望得到一些帮助
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中输入的文本都是相同的。
答案 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");
}
}