【问题标题】:Compare JSONObject and Object with same .toString content将 JSONObject 和 Object 与相同的 .toString 内容进行比较
【发布时间】:2013-12-30 20:02:18
【问题描述】:

在我的 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()) 总是 打印 不同 hashCodes。

我就是不明白为什么?

【问题讨论】:

  • 能把jo和oo的内容发一下吗
  • 向我们展示您所看到的 - 向我们展示代码 - 向我们展示 println 输出...请在发布问题时提供详细信息。这里的一些人非常好,但没有一个是读心者;)
  • 如果对象相等,两个对象的hashCode必须相等,但是如果两个对象不相等,hashCode仍然可以相等。不要在等于的哈希码上中继。在您的情况下, jo.toString() 和 oo.toString() 将不同的字符集。可能缺少空格。请检查一下。
  • toString 方法的结果是特定于类的,因此并不总是保证预期的结果
  • 我对比了println输出的每一个字符,它们都是一样的,所以我认为这里不需要复制过去,你会看到和我一样的东西,它们是一样的) .我试图让我的问题尽可能笼统而又不失其意义,因此未来的其他人可能会从这次谈话中受益,而不必试图理解我的特殊人员。这就是为什么你看不到我的代码或我的 printlns 的输出 ..

标签: java android json


【解决方案1】:

它可能是不同的空格或其他眼睛无法捕捉到的疯狂的东西,没有看到很难分辨的字符串。 我会做一个简单的检查:

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);

【讨论】:

  • 感谢您的回答。如果我以这种方式检查,它们彼此相等,我在 println 中得到了正确的结果。我将使用这种方法来比较它们。
【解决方案2】:

那是因为你是从 JSON 对象而不是它包含的字符串中创建一个字符串,你必须从你的数组或对象中的位置提取字符串。示例(不知道你的 JSON 是如何构建的):

    String s = jo.getString("theOneString");
    String ss = oo.getString("theOneString");
    Log.d(TAG, "bool equals: " s.equalsIgnoreCase(ss))

【讨论】:

  • 谢谢你的回答,但是我需要比较对象的全部内容,JSONObject中没有一个我想比较的字段,我不会比较每个字段分开。 aviad的回答似乎解决了我的问题。
  • 啊哈,误解了你的问题,很高兴它解决了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
  • 2013-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多