Java中如何比较两个数组的内容相等?

错误比较:调用数组对象的equals方法

  • 下述代码输出?
public class ArrayTest {

    public static void main(String[] args) {
        char[] a = new char[2];
        a[0] = 'a';
        a[1] = 'b';

        char[] b = new char[2];
        b[0] = 'a';
        b[1] = 'b';

        System.out.println(a.equals(b));

    }

}
  • 输出false
  • 原因很简单,数组对象继承Object类,Object类中的equals方法比较的是对象地址

对于字符数组,可先转换为String类,再调用equals比较

public class ArrayTest {

    public static void main(String[] args) {
        char[] a = new char[2];
        a[0] = 'a';
        a[1] = 'b';

        char[] b = new char[2];
        b[0] = 'a';
        b[1] = 'b';

        System.out.println((new String(a)).equals(new String(b)));
    }

}
  • 输出true

通用的解决方案:使用数组工具类Arrays

public class ArrayTest {

    public static void main(String[] args) {
        char[] a = new char[2];
        a[0] = 'a';
        a[1] = 'b';

        char[] b = new char[2];
        b[0] = 'a';
        b[1] = 'b';

        System.out.println(Arrays.equals(a, b));
    }

}
  • 输出true

版权声明:本文为fat_cai_niao原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。