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.
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.
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!!