// -----------
// Equals.java
// -----------

import java.util.Arrays;

final class Equals {
    /**
     * O(1) in space
     * O(n) in time
     */
    public static boolean eval (long[] a, long[] b) {
        if (a == b)
            return true;
        if ((a == null) || (b == null))
            return false;
        if (a.length != b.length)
            return false;
        for (int i = 0; i != a.length; ++i)
            if (a[i] != b[i])
                return false;
        return true;}

    /**
     * O(1) in space
     * O(n) in time
     */
    public static boolean eval (Object[] a, Object[] b) {
        if (a == b)
            return true;
        if ((a == null) || (b == null))
            return false;
        if (a.length != b.length)
            return false;
        for (int i = 0; i != a.length; ++i)
            if ((a[i] == null) ? (b[i] != null) : !a[i].equals(b[i]))
                return false;
        return true;}}

final class EqualsTest {
    public static void main (String[] args) {
        System.out.println("Equals.java");

        {
        long[] a = {2, 3, 4};
        long[] b = {2, 3, 4};
        assert Arrays.equals(a, b);
        assert Equals.eval(a, b);
        }

        {
        String[] a = {"abc", "def", "ghi"};
        String[] b = {"abc", "def", "ghi"};
        assert Arrays.equals(a, b);
        assert Equals.eval(a, b);
        }

        {
        String[] a = {"abc", "def", "ghi"};
        String[] b = {"abc", "xyz", "ghi"};
        assert !Arrays.equals(a, b);
        assert !Equals.eval(a, b);
        }

        {
        String[] a = {"abc", null, "ghi"};
        String[] b = {"abc", "def", "ghi"};
        assert !Arrays.equals(a, b);
        assert !Equals.eval(a, b);
        }

        {
        String[] a = {"abc", null, "ghi"};
        String[] b = {"abc", null, "ghi"};
        assert Arrays.equals(a, b);
        assert Equals.eval(a, b);
        }

        {
        Integer[] a = {2, 3, 4};
        String[]  b = {"abc", "def", "ghi"};
        assert !Arrays.equals(a, b);
        assert !Equals.eval(a, b);
        }

        System.out.println("Done.");}}


syntax highlighted by Code2HTML, v. 0.9.1