I\'m learning Java and just came up with this subtle fact about the language: if I declare two integer Arrays with the same elements and compare them using ==
t
No. ==
compares numerical (or boolean) values, or references, only.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
You're probably looking for the Arrays.equals (a,b)
method
If you use ==
operator with Object
you are comparing the references, not the values.
If you use ==
operator with primitive types (int
, long
, boolean
...) you are checking if they have the same values.
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b); //return false;
System.out.println(a[0] == b[0]); //return true;
String[] a1 = {"Cat", "Dog", "Mouse"};
String[] b2 = {"Cat", "Dog", "Mouse"};
System.out.println(a1 == b1); //return false;
System.out.println(a1[0] == b1[0]); //return false; Because String are Object
You can use the Arrays.equals(array1, array2)
method.
Use Arrays.equals(arr1, arr2) method.
The ==
operator just checks if two references point to the same object.
Test:
int[] a = {1, 2, 3};
int[] b = a;
System.out.println(a == b); // returns true as b and a refer to the same array
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(Arrays.equals(a, b)); //returns true as a and b are meaningfully equal