java中判断两个数组是否相等时,应该使用什么方法?
那么首先需要了解java中数组的存储机制
JVM将数组的名称存储在栈里面,定义数组时,JVM会在栈内存中为数组名称分配空间,数组是一个引用类型,声明的时候并没有为数组的元素分配空间,因此需要在堆中为数组的元素分配空间,因此栈中存储的只是堆中存储的元素内存地址的首地址具体如图所示
int []arr = new int[3];
//用==判断两个数组
int []arr1 = new int []{1,2,3};
int []arr2 = new int []{1,2,3};
System.out.println(arr1 == arr2);//结果为false;
Syatem.out.println(Arrays.equals(arr1,arr2));//true
System.out.println(Arrays.compare(arr1,arr2));//0
分析:
因为数组是一个引用,所以在用==判断的时候,只判断它的引用地址是否相同,如果引用地址不相同,那么就返回false
equals是判断两个数组中的元素个数以及元素值是否相同,显然arr1与arr2是相同的,因此返回true
compare进行比较时,如果相同则返回0