Java 我用if-else块得到了错误的答案

Java 我用if-else块得到了错误的答案,java,if-statement,Java,If Statement,我正在比较if-else块中的两个字符串。如果为true,则应执行if块,如果为false,则应执行else块。但是我的代码始终在执行true和false条件下的else块。这是我的代码 if(deckey==keystr) { . . } else { System.out.println("your unauthorised person"); System.exit(0); } 我的deckey包含字符串值abc123,对于keystr,我从中得到的值也是abc123(我通过arrayl

我正在比较if-else块中的两个字符串。如果为true,则应执行if块,如果为false,则应执行else块。但是我的代码始终在执行true和false条件下的else块。这是我的代码

if(deckey==keystr)
{
.
.
}
else
{
System.out.println("your unauthorised person");
System.exit(0);
}
我的deckey包含字符串值abc123,对于keystr,我从中得到的值也是abc123(我通过arraylist得到)

ArrayList listfkey=new ArrayList();
字符串keystr=“”;
对于(int i=0;i

请帮助我。

需要使用
.equals
方法测试字符串是否相等:

deckey.equals(keystr)
不是
=
操作符,它测试两个字符串实例是否相同:

deckey==keystr

灵长类是另一回事,但对于Java对象,==只有在对象与自身(相同的内存位置)进行比较时才会返回true。对于对象,使用
equals
方法或
Comparator
接口

==用于比较内存位置,它将位于某些基本数据上

字符串是对象,所以为了比较它,我们需要使用.equals()方法
它来自Comparator

这样比较字符串不会有好的结果:您所做的只是比较引用。使用.equals方法代替。可能重复的请不要对重复的摆好姿势的问题进行否决(当然,除非通过搜索很容易找到答案)。投票关闭。您也可以使用
deckey.equalsIgnoresCase(keystr)
,这样它就不在乎大小写了。在处理任何字符串之前,最好先执行空/空检查:
StringUtils.isEmpty(deckey)| StringUtils.isEmpty(keystr)
deckey==keystr