在我的Android应用程序中,我有一个JSONObject(我们将其命名为 jo ),我有一个简单的Java对象(我们将其命名为 oo )。如果我在它们上面调用 .toString 方法,它们都包含完全相同的字符串。 但是当我用 .equals()方法比较那些字符串时,我永远不会得到 true 。另外,当我打印那些字符串的 hashCode -s时,它们总是不同的。我不明白为什么..
System.out.println(jo.toString())
和System.out.println(oo.toString())
打印完全相同的值。但是:
jo.toString().equals(oo.toString())
从不返回 true 。
jo.toString().trim().equals(oo.toString().trim())
从不返回 true 。
System.out.println(jo.toString().hashCode())
和System.out.println(oo.toString().hashCode())
始终打印不同的 hashcode。
我只是不明白为什么?
答案 0 :(得分:2)
它可能是不同的空白区域或眼睛没有抓到的其他疯狂的东西,没有看到它很难说的字符串。 我会做一个简单的检查:
char[] first = s1.toCharArray();
char[] second = s2.toCharArray();
int length = s1.length;
int pos = 0;
boolean equal = true;
for(int i = 0; i < length && equal; i++) {
if (first[i] == second[i]) {
pos++;
} else {
equal == false;
}
}
System.out.println("equal=" + equal + ", position of non-equal=" + pos);
答案 1 :(得分:1)
那是因为你要从JSON对象中创建一个字符串而不是它包含的String,你必须从数组或对象中的位置提取字符串。示例(不知道如何构建JSON):
String s = jo.getString("theOneString");
String ss = oo.getString("theOneString");
Log.d(TAG, "bool equals: " s.equalsIgnoreCase(ss))