Comparing integer arrays in Java. Why does not it work?
I am 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 with ==
, the result is false
. Why is this happening? Shouldn't the comparison be compared with true
?
public class Why {
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {1, 2, 3};
System.out.println(a == b);
}
}
Thanks in advance!
source to share
use the Arrays.equals (arr1, arr2 ) method . The operator ==
simply checks if the 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
source to share
Not. ==
compares only numeric (or boolean) values ββor references.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21
You are probably looking for the method Arrays.equals (a,b)
source to share
If you use == operator with Object, you are checking if two references point to the same object. If you use the == operator with primitive types (int, long, boolean ...) you are looking to see 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
source to share