Java 为什么我的弦不相等?

Java 为什么我的弦不相等?,java,string,if-statement,Java,String,If Statement,我有两个名为str1的字符串,它们由url中的数据填充,str2由SQLite数据库中的数据填充。str1是“x4”,str2是“x4”,但当我要比较它们时,它们并不相等 if(str1.equals(str2)) System.out.println(str1 + "=" + str2); else System.out.println(str1 + "!=" + str2); 它总是打印x4=x4 我改变了价值观,但总是不平等 if(str1.equals(str2)) System.ou

我有两个名为str1的字符串,它们由url中的数据填充,str2由SQLite数据库中的数据填充。str1是“x4”,str2是“x4”,但当我要比较它们时,它们并不相等

if(str1.equals(str2)) System.out.println(str1 + "=" + str2);
else System.out.println(str1 + "!=" + str2);
它总是打印
x4=x4

我改变了价值观,但总是不平等

if(str1.equals(str2)) System.out.println(str1 + "=" + str2);
else System.out.println(str1 + "!=" + str2);
Database.str1为“x4”,str2为“x4”

看起来可能是这样,但我敢打赌情况并非如此。为什么不打印出每个字符串的字符数组,这样您就可以识别它们的不同之处了?我建议查找前导/尾随空格、非打印字符、Unicode相关差异等。

尝试将其更改为:

StringBuilder string = new StringBuilder();
string.append("'");
string.append(str1);
string.append("'");

if(!str1.equals(str2)){
    string.append("!");
}

string.append("'");
string.append(str2);
string.append("'");
System.out.println(string.toString());
其中一个字符串中很可能有空格、回车或制表符。 通过在每个字符串的开头和结尾添加一个字符,您可以确定是否是这种情况

如果问题仍然存在,则可能意味着其中一个不同的字符不可打印。在这种情况下,请尝试:

string.append(str1.toCharArray()); 
而不是

string.append(str1);

对str2做同样的处理,它可能是由尾随空格引起的,如前所述,或者(可能您没有注意到)是由大小写差异引起的。试试这个:

if(str1.trim().equalsIgnoreCase(str2.trim()))
    System.out.print(str1 + "=" + str2);
else
    System.out.print(str1 + "!=" + str2);

使用
trim()
删除尾随空格,并考虑大小写差异,使用
equalsIgnoreCase()
而不是
equals()

尾随空格可能?尝试打印
System.out.println(“>”+str1+”!=“+str2+”@Berger
System.out.println(aries.toString(str1.tocharray())+“!=”+Arrays.toString(str2.toCharArray());
会帮助你看得更清楚。请做一个。@ArneHB它不可能是编码的,你建议的构造函数甚至不存在。我不确定OP问的是这个问题。他问他们为什么不相等,而不是他应该做什么以便他们通过语句。但是如果我错了,那么你的答案是正确的。如果差异不在最后呢字符串?例如,
Ab
A\0b
在我的控制台中看起来相同,但是
\0
不会被删除。@而且在这种情况下,字符串不是“不相等”吗?确实如此。但是OP问为什么两个“看起来相等”的字符串不相等。