Compare two arrays of primitives in Java? Compare two arrays of primitives in Java? arrays arrays

Compare two arrays of primitives in Java?


Change your first comparison to be:

if (a == b)    return true;

This not only catches the "both null" cases, but also "compare an array to itself" case.

However, for a simpler alternative - use Arrays.equals which has overloads for each primitive type. (The implementation is very similar to yours, except it hoists the array length out of the loop. On .NET that can be an anti-optimization, but I guess the JRE library implementors probably know better for the JVM :)


I think the most efficient should be to use the helper methods in the Arrays class, because they might be implemented more cleverly. So in this case, use

Arrays.equals(a, b);


I don't know if this will help anyone, but this seems to be working:

        if(type == type_BooleanArray) {            boolean eq = Arrays.equals((boolean[]) thisObj, (boolean[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_ByteArray) {            boolean eq = Arrays.equals((byte[]) thisObj, (byte[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_ShortArray) {            boolean eq = Arrays.equals((short[]) thisObj, (short[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_CharArray) {            boolean eq = Arrays.equals((char[]) thisObj, (char[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_IntArray) {            boolean eq = Arrays.equals((int[]) thisObj, (int[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_LongArray) {            boolean eq = Arrays.equals((long[]) thisObj, (long[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_FloatArray) {            boolean eq = Arrays.equals((float[]) thisObj, (float[]) thatObj);            if(!eq) {                return false;            }        } else if(type == type_DoubleArray) {            boolean eq = Arrays.equals((double[]) thisObj, (double[]) thatObj);            if(!eq) {                return false;            }        } else {            if(!thisObj.equals(thatObj)) {                return false;            }        }

Apparently array.equals(otherArray) does a array == otherArray, and not what you would expect.