Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

deepToString, deepEquals, etc.

Me deparei com o método deepToString e certa vez também com o método deepEquals.

Gostaria de saber qual a diferença entre eles para o toString e equals por exemplo.

1 resposta
solução!

Olá Maycon, tudo bem com você?

Os métodos deepToString(array) e deepEquals(objeto1, objeto2) pertencem à classe java.util.Arrays e serão usados quando um determinado array contém outros arrays como elementos. Isso é o que chamamos de array multidimensional!

Você vai querer usar o deepToString() quando temos um array multidimensional, pois se tentarmos usar o toString(), acabaremos imprimindo o hash code do objeto e não seu conteúdo:

int[][] primos = new int[2][2];
        mat[0][0] = 2;
        mat[0][1] = 3;
        mat[1][0] = 5;
        mat[1][1] = 7;
        System.out.println(Arrays.toString(primos));

Saída:

[I@68dk9415, [I@5h02a13p]

Por outro lado, se estivermos lidando com um array de primitivos (não os wrappers), então é melhor usar o toString() mesmo já que usar o deepToString() ocasionaria um erro.

Com o deepEquals(), a lógica é a mesma. Usaremos em situações onde queremos comparar arrays multidimensionais:

package ds.arrays;

import java.util.Arrays;

public class DeepEquals {
    public static void main(String[] args) {
        String[] string1 = new String[]{"first","second"};
        String[] string2 = new String[]{"first","second"};

        Integer[] num1 = new Integer[]{1};
        Integer[] num2 = new Integer[]{2};

        Object[] object1 = new Object[]{"first", "second", new String[]{"third"}};
        Object[] object2 = new Object[]{"first", "second", new String[]{"third"}};

        /* Same Behavior when there are no nested array type child elements */
        System.out.println("Compare string1 and string2 Using HashCode and Equals: " + Arrays.equals(string1, string2));
        System.out.println("Compare string1 and string2 Using DeepHashCode and DeepEquals: " + Arrays.deepEquals(string1, string2));

        // Marking two arrays as null
        num1 = null;
        num2 = null;
        /* Same Behavior when arrays are null */
        System.out.println("Compare (null arrays) num1 and num2 Using HashCode and Equals: " + Arrays.equals(num1, num2));
        System.out.println("Compare (null arrays) num1 and num2 Using DeepHashCode and DeepEquals: " + Arrays.deepEquals(num1, num2));

        /* With nested objects, Behavior is totally different  */
        System.out.println("Compare object1 and object2 Using HashCode and Equals: " + Arrays.equals(object1, object2));
        System.out.println("Compare object1 and object2 Using DeepHashCode and DeepEquals: " + Arrays.deepEquals(object1, object2));

Saída:

Compare string1 and string2 Using HashCode and Equals: true

Compare string1 and string2 Using DeepHashCode and DeepEquals: true

Compare (null arrays) num1 and num2 Using HashCode and Equals: true

Compare (null arrays) num1 and num2 Using DeepHashCode and DeepEquals: true

Compare object1 and object2 Using HashCode and Equals: false

Compare object1 and object2 Using DeepHashCode and DeepEquals: true

Fonte: https://www.tothenew.com/blog/array-comparison-use-equals-or-deepequals/

Fez sentido? Se ficou alguma dúvida é só avisar!!

Forte abraço e bons estudos!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software