黑马程序员技术交流社区
标题:
想问下Arrays类中的equals和deequals有什么区别
[打印本页]
作者:
bolt
时间:
2015-9-9 15:56
标题:
想问下Arrays类中的equals和deequals有什么区别
想问下Arrays类中的equals和deequals有什么区别
作者:
kevin986745zk
时间:
2015-9-9 16:31
又是这个问题
作者:
德胜
时间:
2015-9-9 17:25
是Array类吧?
作者:
Doug
时间:
2015-9-9 19:01
本帖最后由 Doug 于 2015-9-9 19:10 编辑
看代码。
Arrays.equals(Object[] a1, Object[] a2)只有
一重
判断,即判断
引用是否地址相同
或
元素是否equals()
。
Arrays.deepEquals(Object[] a1, Object[] a2)则是
递归调用
自身或者Arrays.deepEquals(Object o1, Object o2)。
就是说,在一维数组的时候,二者没有区别;只有多维数组才能显示出不同:equals只能判断一维是否相同,deepEquals则会挨个对比内容是否相同。
作者:
Doug
时间:
2015-9-9 19:03
给你个例子,断点跟踪输出那里就明白了。
Person p11 = new Person("ww", 11);
Person p12 = new Person("xx", 12);
Person p13 = new Person("yy", 13);
Person p21 = new Person("ww", 11);
Person p22 = new Person("xx", 12);
Person p23 = new Person("yy", 13);
Person[] ps1 = { p11, p12, p13 };
Person[] ps2 = { p21, p22, p23 };
System.out.println(Arrays.equals(ps1, ps2));// true
System.out.println(Arrays.deepEquals(ps1, ps2));// true
Person[][] pss1 = { ps1, ps2 };
Person[][] pss2 = { ps2, ps2 };
System.out.println(Arrays.equals(pss1, pss2));// false
System.out.println(Arrays.deepEquals(pss1, pss2));// true
复制代码
public class Person {
private int age;
private String name;
public Person(String name, int age) {
super();
this.age = age;
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Person other = (Person) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2