Java equals(string2)返回false,尽管两个字符串的长度完全相同

Java equals(string2)返回false,尽管两个字符串的长度完全相同,java,android,Java,Android,当两个字符串不同时,我尝试执行一个操作。字符串实际上是时间,我正在检查从远程数据库获得的新时间是否不同 我反复地从数据库中获取时间,并有一个包含前一时间的变量来检查新时间是否与旧时间相同。如果不是,我就做手术。我看到时间完全相同,但代码仍然在执行 我甚至检查了两个字符串的长度,它们完全相同。IToaststring1.equals(string2)并得到false,尽管它们是相同的 if( (!lastUpdated.equals(prevTime))) { swipe(Integ

当两个字符串不同时,我尝试执行一个操作。字符串实际上是时间,我正在检查从远程数据库获得的新时间是否不同

我反复地从数据库中获取时间,并有一个包含前一时间的变量来检查新时间是否与旧时间相同。如果不是,我就做手术。我看到时间完全相同,但代码仍然在执行

我甚至检查了两个字符串的长度,它们完全相同。I
Toast
string1.equals(string2)并得到false,尽管它们是相同的

    if( (!lastUpdated.equals(prevTime))) {
   swipe(Integer.parseInt(x1.toString()), Integer.parseInt(y1.toString()), Integer.parseInt(x2.toString()), Integer.parseInt(y2.toString()));
    CodeType.setLength(0);
    Toast.makeText(getApplication(), " lastUp " + lastUpdated + ", prevtime " + prevTime, Toast.LENGTH_SHORT).show();
    Toast.makeText(getApplication(), ""+lastUpdated.equals(prevTime), Toast.LENGTH_SHORT).show();
    updatePrevTime(lastUpdated);

   }

字符串中有尾随空格或前导空格。 试试这个:
lastUpdated.trim().equals(prevTime.trim())


如果两者相等,则应为真。

字符串中有尾随或前导空格。 试试这个:
lastUpdated.trim().equals(prevTime.trim())


如果两者相等,则应为真。

检查上次更新和上次更新的时间

下面是equals()的简单示例。试试这个应该行

  String Str1 = "Hello";
  String Str2 = "Hello";
  boolean retVal;

  retVal = Str1.equals( Str2 );
  System.out.println("Returned Value = " + retVal );
输出


检查您的上次更新和上次更新时间

下面是equals()的简单示例。试试这个应该行

  String Str1 = "Hello";
  String Str2 = "Hello";
  boolean retVal;

  retVal = Str1.equals( Str2 );
  System.out.println("Returned Value = " + retVal );
输出


如果使用的是
StringBuffer
equals
将不会比较这两个
String
s。 这样做:


如果使用的是
StringBuffer
equals
将不会比较这两个
String
s。 这样做:


使用TextUtils类:

您可以尝试使用TextUtils.equals(CharSeq1,Charseq2),以防您在比较中遗漏了一些案例。
TextUtils中的方法处理空案例。
如果返回方法仍然相同,那么可以尝试使用by char(可能比使用标准equals更合适):

for(int i=0;i
您可以在此处找到有关该类的详细信息:

使用TextUtils类:

您可以尝试使用TextUtils.equals(CharSeq1,Charseq2),以防您在比较中遗漏了一些案例。
TextUtils中的方法处理空案例。
如果返回方法仍然相同,那么可以尝试使用by char(可能比使用标准equals更合适):

for(int i=0;i
您可以在此处找到有关该类的详细信息:

时间是如何格式化为字符串的?您的值是否包含时区或时段(am/am)等字母?您可以对这两个值使用相同的格式化程序,还是使用
equalsIgnoreCase()

时间是如何格式化为字符串的?您的值是否包含时区或时段(am/am)等字母?您可以对这两个值使用相同的格式化程序,还是使用
equalsIgnoreCase()

解释

如果字符串不是严格意义上的String类,则.equals()方法可能会出现问题。最近我遇到了同样的问题,一个是字符串类,另一个是来自EditText.getText()。如果您不密切注意,这可能是问题所在,因为getText()方法实际上返回的是与字符串不同的CharSequence,它可以通过自动转换在程序中的其他地方工作,但不能在.equal()中工作。但是使用getText().toString()给出了正确的结果,因为现在我正在比较严格字符串类的两个对象

(希望这对某人有帮助。)

当它来自流类时,同样的问题也会发生,因为它在内部处理字符,也可能是由于编码。所以请查看它们。

解释

如果字符串不是严格意义上的String类,则.equals()方法可能会出现问题。最近我遇到了同样的问题,一个是字符串类,另一个是来自EditText.getText()。如果您不密切注意,这可能是问题所在,因为getText()方法实际上返回的是与字符串不同的CharSequence,它可以通过自动转换在程序中的其他地方工作,但不能在.equal()中工作。但是使用getText().toString()给出了正确的结果,因为现在我正在比较严格字符串类的两个对象

(希望这对某人有帮助。)


当它来自流类时,同样的问题也会发生,因为它在内部处理字符,也可能是由于编码。所以,请查看它们。

请查看否决投票的原因。。我发布问题
(!lastUpdated.equals(prevTime))才过了一秒钟
您只检查假条件。调试并检查字符串中的实际值。如果它未按预期工作,则
lastUpdated
prevTime
的值是多少?如果它在更新后工作,这显然是问题所在。但是我们无法帮助您,因为您没有提供足够的代码让我们知道这些变量是哪种类型的…请不要投票的原因..自从我发布问题
(!lastUpdated.equals(prevTime))以来只过了一秒钟
您只检查假条件。调试并检查字符串中的实际值。如果它未按预期工作,则
lastUpdated
prevTime
的值是多少?如果它在更新后工作,这显然是问题所在。但是,我们无法帮助您,因为您没有包含足够的代码,我们无法知道这些变量是哪种类型的……这与在以字符串作为参数的字符串上调用
equals
完全相同。这实际上并不相同,请看该方法。他可以传递字符串,也可以尝试使用Charsequence,正如我已经说过的
yourStrBuffer.toString().equals(prevTime.toString())
for (int i = 0; i < length; i++) {
     if (a.charAt(i) != b.charAt(i)) {
         return false;
     }
}