Java两个相等的字符串不相等

Java两个相等的字符串不相等,java,string,Java,String,我有以下问题:我有一个从MySQL数据库(使用JDBC驱动程序)读取的字符串,必须将其与通过TCP通过BufferedReader接收的另一个字符串进行比较。当我使用String.equals时,即使字符串完全相等,也会返回false,我甚至将两个字符串打印到控制台以确保没有任何打字错误或空对象String.compareTo返回一个-100左右的负数 我真的很困惑,不知道如何解决这个问题。可能与数据库的编码(UTF-8)有关 根据要求,以下是我的代码片段: public TeleportSig

我有以下问题:我有一个从MySQL数据库(使用JDBC驱动程序)读取的字符串,必须将其与通过TCP通过
BufferedReader
接收的另一个字符串进行比较。当我使用
String.equals
时,即使字符串完全相等,也会返回false,我甚至将两个字符串打印到控制台以确保没有任何打字错误或空对象
String.compareTo
返回一个-100左右的负数

我真的很困惑,不知道如何解决这个问题。可能与数据库的编码(UTF-8)有关

根据要求,以下是我的代码片段:

public TeleportSign getTeleportSign(String target) {
    // I used a HashMap, but I switched to an ArrayList in order to be able
    // to compare the Strings directly.
    //return signs.get(target);
    for(TeleportSign s : signsList) {
        // I am printing the Strings here. I even put stars to the left
        // and the right of the String to make sure there are no
        // spaces or new lines. s.getTarget() returns the String from the DB,
        // target is the String sent over TCP.
        System.out.println("*" + s.getTarget() + "* " +
                String.valueOf(s.getTarget().compareTo(target))
                + " *" + target + "*");
        if(s.getTarget().compareTo(target) == 0)
            return s;
    }
    return null;
}
控制台输出为:

*TDM1* -84 *TDM1*
提前谢谢!
船长,所以我重新启动了整个系统并重试。现在一切正常。我无法向自己解释这一点,因为我多次重新启动JVM,但什么都没有发生,系统重新启动不应该影响这样的Java程序

很抱歉我浪费了大家的时间,但我真的很感谢你们的快速帮助


EDIT:我现在使用
String
中的
trim
方法。此方法将删除任何前导的空字符,以防止出现类似这样的问题。我希望这将有助于有同样问题的人

字符串值是多少??请添加代码段这两个字符串值是什么?打印出两个字符串中每个字符的数字字符值。你会注意到,它们只是看起来和未经训练的眼睛一样!尝试类似System.out.println(Arrays.toString(foo.tocharray());然后把结果贴在这里。。。可能是用空格、大小写差异、相似字符等填充。1对I…输出-84将与第一个字符串中的空字符相一致,并与另一个字符串中的大写字母T进行比较。很可能是数据库或JDBC驱动程序中的某些内容(因为我怀疑其中有空字符)。谢谢回复。