Java : 配列のequals()メソッドがぐったりな件

たとえば、

public class Comp {
    public static void main(String[] args) {
        int[] a = new int[] { 1, 3, 8, };
        int[] b = new int[] { 1, 3, 8, };
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(java.util.Arrays.equals(a, b));
    }
}

なら、結果は

false
false
true

こうすると

public class Comp {
    public static void main(String[] args) {
        Object[] a = new Object[] { new int[] {1,2}, new int[] {3,4}};
        Object[] b = new Object[] { new int[] {1,2}, new int[] {3,4}};
        System.out.println(a == b);
        System.out.println(a.equals(b));
        System.out.println(java.util.Arrays.equals(a, b));
    }
}

結果は

false
false
false

なんでこんな仕様になっているのでしょう。