首先定义两个数组
int[] arry1={1,2,3,4,5,6};
int[] arry2={1,2,3,4,5,6};
判断这两个数组的元素是否相等(这里以整型数组为例,其他类型一样的),首先想的是关系运算符==,很显然这样判断是不等的,因为关系运算符==在比较时是比较的二者的内存地址,定义两个数组当然开辟了两个不同的内存空间。
其次可能想到的是equals方法,这是字符串比较的常用方法,可能会想到用arry1.equals(arry2),但是我们去看看源码
public boolean equals(Object obj) {
return (this == obj);
}
这是Object类下的方法,很明显也是在比较二者的地址,返回的当然是false了
我觉得可能还会有人这样想:把两个数组分别转换成字符串,再比较两个字符串是否相等。我们来试试看
public class main {
public static void main(String[] args) {
int[] artg={1,2,3,4,5,6};
int[] aty={1,2,3,4,5,6};
int length1=artg.length;
int length2=aty.length;
if(add(artg,length1).equals(add(aty,length2))){ //判断转换后的字符串是否相等
System.out.println("true");
}else{
System.out.println("false");
}
}
/**
* 将数组转换成字符串
* @param arr:数组名
* @param length:数组长度
* @return
*/
static String add(int[] arr,int length){
StringBuffer stringBuffer=new StringBuffer();
for (int i=0;i<length;i++){
stringBuffer.append(arr[i]+" ");
}
String sr5=stringBuffer.toString();
return sr5;
}
}
我们看到返回为true,成功了!但是有没有觉得比较麻烦啊,其实我们可以调用现成的方法,在java.util包下有Arrays类,该类里面有equals方法,我们去看看源码
public static boolean equals(int[] a, int[] a2) {
if (a==a2)
return true;
if (a==null || a2==null)
return false;
int length = a.length;
if (a2.length != length)
return false;
for (int i=0; i<length; i++)
if (a[i] != a2[i])
return false;
return true;
}
官方注释说到:In other words, two arrays are equal if they contain the same elements in the same order. Also,two array references are considered equal if both are null.
谷歌翻译:换句话说,如果两个数组包含相同顺序的相同元素,则它们相等。 另外,如果两个数组引用均为 null ,则认为它们相等。
我们来实践一下,
public class main {
public static void main(String[] args) {
int[] artg={3,1,6,2,5,4};
int[] aty={1,2,4,3,6,5};
Arrays.sort(artg); //对两数组进行排序
Arrays.sort(aty);
if (Arrays.equals(artg,aty)){
System.out.println("true");
}else{
System.out.println("false");
}
}
}
成功了!代码量减少了一半,而且对无序数组也适用!