首先定義兩個數組
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");
}
}
}
成功了!代碼量減少了一半,而且對無序數組也適用!