【发布时间】: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 的输出 ..