JUnit
约 349 字
预计阅读 1 分钟
疑问
assertSame与assertEquals的区别
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
/**
* 公
*/
class Gong {
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
return "男".equals(obj.toString());
}
}
@Test
public void sameAndEquals() {
Gong gong1 = new Gong();
Gong gong2 = new Gong();
String nan1 = "男";
String nan2 = "男";
StringBuilder nan3 = new StringBuilder("男");
// 比较的是地址值
Assert.assertNotSame(gong1, nan1);
Assert.assertNotSame(gong1, gong2);
// 字符串常量池,导致 nan1 与 nan2 的地址值相同
Assert.assertSame(nan1, nan2);
// 地址值不一样
Assert.assertNotSame(nan1, nan3);
// assertEquals 比较的是 gong1.equals() 方法的实现
Assert.assertEquals(gong1, nan1);
// 地址值不同,由于未重写 toString() 所以也不同
Assert.assertNotEquals(gong1, gong2);
// 地址值相同
Assert.assertEquals(nan1, nan2);
// equals 重写,地址值不同,但是 toString() 的内容相同
Assert.assertEquals(gong1, nan3);
}
|
==总结==: