两个字符串不相等

时间:2013-10-10 20:22:38

标签: java android string equals

我有一个Question类,其中包含一些属性,包括位置名称,即String。我还有一个Location类,它有一些属性和名称方法。我想检查两者是否相等,这里有一些方法和结果:

Log.e("", question.getLocation() + ", size:" + question.getLocation().length());
Log.e("", mLocation.getLocationName() + ", size:" + mLocation.getLocationName().length());
Log.e("", "equals: " + question.getLocation().equalsIgnoreCase(mLocation.getLocationName()));
Log.e("", "location equals self: " + mLocation.getLocationName().equalsIgnoreCase(mLocation.getLocationName()));
Log.e("", "question location equals self: " + question.getLocation().equalsIgnoreCase(question.getLocation()));

这是日志:

10-10 19:11:35.618    1893-1893/com.example E/﹕ Machine Room, size:12
10-10 19:11:35.618    1893-1893/com.example E/﹕ Machine Room, size:12
10-10 19:11:35.618    1893-1893/com.example E/﹕ equals: false
10-10 19:11:35.618    1893-1893/com.example E/﹕ location equals self: true
10-10 19:11:35.618    1893-1893/com.example E/﹕ question location equals self: true

我不知道发生了什么以及为什么两个字符串不相等?有谁能告诉我?

public class Question {
   ...
   private String location;

   public String getLocation() {
    return location;
   }

   public void setLocation(String location) {
    this.location = location;
   }

}

public class Location {
   ...
   private String locationName;

   public String getLocationName() {
     return locationName;
   }

   public void setLocationName(String ln) {
     locationName = ln;
   }
}

他们只有getter和setter,并且在其他任何地方都没有被修改,所以没有任何东西触及日志之间的两个单词。

解决方案

正如RC在评论中提到的: 将两个字符串作为字节转储并进行比较,也许空格不是其中一个字符串上的空格(alt + 0160在MSWindows下产生一个“看起来相似”的空格)

1 个答案:

答案 0 :(得分:-2)

RC是绝对正确的! 使用getBytes()方法将String转换为byte Array 然后使用Arrays.equals(Byte [],Byte [])比较字节数组对象; 这是最好的解决方案。