黑马程序员技术交流社区

标题: 想问下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
给你个例子,断点跟踪输出那里就明白了。
  1.                 Person p11 = new Person("ww", 11);
  2.                 Person p12 = new Person("xx", 12);
  3.                 Person p13 = new Person("yy", 13);
  4.                 Person p21 = new Person("ww", 11);
  5.                 Person p22 = new Person("xx", 12);
  6.                 Person p23 = new Person("yy", 13);

  7.                 Person[] ps1 = { p11, p12, p13 };
  8.                 Person[] ps2 = { p21, p22, p23 };
  9.                 System.out.println(Arrays.equals(ps1, ps2));// true
  10.                 System.out.println(Arrays.deepEquals(ps1, ps2));// true

  11.                 Person[][] pss1 = { ps1, ps2 };
  12.                 Person[][] pss2 = { ps2, ps2 };
  13.                 System.out.println(Arrays.equals(pss1, pss2));// false
  14.                 System.out.println(Arrays.deepEquals(pss1, pss2));// true
复制代码


  1. public class Person {
  2.         private int age;
  3.         private String name;

  4.         public Person(String name, int age) {
  5.                 super();
  6.                 this.age = age;
  7.                 this.name = name;
  8.         }

  9.         @Override
  10.         public int hashCode() {
  11.                 final int prime = 31;
  12.                 int result = 1;
  13.                 result = prime * result + age;
  14.                 result = prime * result + ((name == null) ? 0 : name.hashCode());
  15.                 return result;
  16.         }

  17.         @Override
  18.         public boolean equals(Object obj) {
  19.                 if (this == obj)
  20.                         return true;
  21.                 if (obj == null)
  22.                         return false;
  23.                 if (getClass() != obj.getClass())
  24.                         return false;
  25.                 Person other = (Person) obj;
  26.                 if (age != other.age)
  27.                         return false;
  28.                 if (name == null) {
  29.                         if (other.name != null)
  30.                                 return false;
  31.                 } else if (!name.equals(other.name))
  32.                         return false;
  33.                 return true;
  34.         }

  35. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2