Comparing integer Arrays in Java. Why does not == work?

30,761

Solution 1

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

Solution 2

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

Share:
30,761
rodrigoalvesvieira
Author by

rodrigoalvesvieira

I am a software engineer who writes mostly Ruby, Go and C++.

Updated on August 08, 2022

Comments

  • rodrigoalvesvieira
    rodrigoalvesvieira over 1 year

    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 == the result is false. Why does this happen? Should not the comparison evaluate to 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!

  • e-info128
    e-info128 over 7 years
    Howto find difrerences without using a loop?