Assert.assertEquals(Object1, Object2) 如何比较两个对象?
在java中,当使用Object1.equals(object2)比较object1和object2时,即使对象的内容相同,它们也不相等。
就好像您比较 String1.equals(String2) 一样,即使它们是不同的对象,这也会将两个字符串显示为相同。
String a = "hi there";
String b = "hi there";
a.equals(b) returns true
JSONObject j1 = (new JSONObject()).put("a","hi there");
JSONObject j2 = (new JSONObject()).put("a","hi there");
j1.equals(j2) does not return true;
问)为什么对象不转换为二进制流,然后比较检查它们是否相同?
q) Assert.assertEquals(j1,j2):断言失败。为什么?
最佳答案
你混淆了不同的想法。
一个概念被称为身份:两个引用是否指向同一个对象,即同一 block 内存?这就是 ==
测试的内容,如 x == y
中,其中 x 和 y 是引用变量(指针)而不是基元。
Object
类上的 .equals
方法具有不同的意图。该方法询问两个对象的含义是否相同。该方法判断两个对象的内容是否显着相同。在某些情况下,“显着”意味着每个字段的每个值完全相同。这到底意味着什么取决于从 Object
继承的特定子类。无论谁编写 equals
的实现,都可以决定两个对象之间应该比较什么。
说到比较二进制流,首先,对象没有二进制流。此外,甚至两段文本也可以具有相同的含义,但其位有所不同——只需查找 Unicode Normalization 即可。或者甚至更简单的情况,在某些情况下,如果我们选择忽略大写与小写,则两段文本可能被认为是等效的,例如: Dog
和 dog
和 DOG
可能所有三个都被认为是相同的,但每个都带有不同的八位位组。
上下文就是一切。
In java, when you compare object1 and object2 using Object1.equals(object2), they are not equal even though the content of the object is same.
您的陈述根本无法针对所有类别进行。您必须查看每个类的 equals
实现。类 Foo
可能会比较对象中的最后一个状态,而类 Bar
可能会选择仅比较类型为 UUID
的单个 id
字段,而忽略其所有其余字段中的值。
Assert.assertEquals(j1,j2): assertion fails. why ?
我不知道。我必须查找 Javadoc,以了解相关特定类(在您的情况下为 JSONObject
)的 Object::equals
方法重写的实现。
重点是,您必须为每次比较查找equals
方法文档。
同样,请务必为您实现的每个 equals
方法重写编写清晰的文档。
关于java - Assert.assertEquals(object 1, object2) 如何比较两个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57344311/