Help comparing two arrays

Discussion in 'Java' started by Miss Michelle. Heigardt, Jul 30, 2005.

  1. Hallo, I have written this. It prints "false" and I do not know why. I
    think it should print "true". If you can help I would thank you.
    Thank you
    Michelle

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


    Here is something I copied from here saying it should print "true".

    http://java.sun.com/j2se/1.4.2/docs/api/java/util/Arrays.html#equals(byte[], byte[])

    public static boolean equals(int[] a,
    int[] a2)

    Returns true if the two specified arrays of ints are equal to one
    another. Two arrays are considered equal if both arrays contain the
    same number of elements, and all corresponding pairs of elements in the
    two arrays are equal. In other words, two arrays are equal if they
    contain the same elements in the same order. Also, two array references
    are considered equal if both are null.

    Parameters:
    a - one array to be tested for equality.
    a2 - the other array to be tested for equality.
    Returns:
    true if the two arrays are equal.
     
    Miss Michelle. Heigardt, Jul 30, 2005
    #1
    1. Advertisements

  2. Michelle:

    You actually have the answer right there. What you have is an array
    whose components are arrays of ints. Not an array of ints as required
    by the method Arrays.equals(int[] a, int[] a2).

    Change the last line of your program to:

    System.out.println(java.util.Arrays.equals(i[1],j[1]));

    and it will print true.
     
    Knute Johnson, Jul 30, 2005
    #2
    1. Advertisements

  3. int i[][] is not an array of int. It is an array of references to arrays
    of int, so you were looking at the wrong part of the documentation.

    To compare, for example, i[0] to j[0], Arrays.equals will use
    (i[0]==null ? j[0]==null : i[0].equals(j[0])), which is false unless
    i[0] and j[0] are either both null or are references to the same object.

    A lot of Java books confuse two different concepts:

    1. Arrays of array references, which Java does have.

    2. Multidimensional arrays, which it does not have and for which arrays
    of array references are a rough approximation.

    If i and j were two-dimensional arrays of int, they would have the same
    size, and the same elements, in the same order, so they should be
    equal. They are not equal because they are really arrays of references
    to different arrays of int.

    Patricia
     
    Patricia Shanahan, Jul 30, 2005
    #3
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.