{"id":3698,"date":"2017-02-24T01:17:23","date_gmt":"2017-02-23T23:17:23","guid":{"rendered":"http:\/\/www.tutego.de\/blog\/javainsel\/?p=3698"},"modified":"2017-02-24T01:17:23","modified_gmt":"2017-02-23T23:17:23","slug":"arrays-mit-arrays-equals-und-arrays-deepequals-vergleichen","status":"publish","type":"post","link":"https:\/\/www.tutego.de\/blog\/javainsel\/2017\/02\/arrays-mit-arrays-equals-und-arrays-deepequals-vergleichen\/","title":{"rendered":"Arrays mit Arrays.equals(\u2026) und Arrays.deepEquals(\u2026) vergleichen"},"content":{"rendered":"<p>Die statischen Methoden Arrays.equals(\u2026) vergleichen, ob zwei Arrays die gleichen Inhalte besitzen; dazu ist die \u00fcberladene Methode f\u00fcr alle wichtigen Typen definiert. Wenn zwei Arrays tats\u00e4chlich die gleichen Inhalte besitzen, ist die R\u00fcckgabe der Methode true, sonst false. Nat\u00fcrlich m\u00fcssen beide Arrays schon die gleiche Anzahl von Elementen besitzen, sonst ist der Test sofort vorbei und das Ergebnis false. Im Fall von Objekt-Arrays nutzt Arrays.equals(\u2026) nicht die Identit\u00e4tspr\u00fcfung per ==, sondern die Gleichheit per equals(\u2026).<\/p>\n<p>Beispiel<\/p>\n<p>Vergleiche drei Arrays:<\/p>\n<pre>int[] array1 = { 1, 2, 3, 4 };\n\nint[] array2 = { 1, 2, 3, 4 };\n\nint[] array3 = { 9, 9, 2, 3, 9 };\n\nSystem.out.println( <strong>Arrays.equals( array1, array2 )<\/strong> );\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ true\n\nSystem.out.println( <strong>Arrays.equals( array2, 1, 3, array3, 2, 4 )<\/strong> );\u00a0 \/\/ true<\/pre>\n<p>Ein Vergleich von Teil-Arrays ist erst in Java 9 hinzugekommen.<\/p>\n<p>Bei unterreferenzierten Arrays betrachtet Arrays.equals(\u2026) das innere Array als einen Objektverweis und vergleicht es auch mit equals(\u2026) \u2013 was jedoch bedeutet, dass nicht identische, aber mit gleichen Elementen referenzierte innere Arrays als ungleich betrachtet werden. Die statische Methode deepEquals(\u2026) bezieht auch unterreferenzierte Arrays in den Vergleich ein.<\/p>\n<p>Beispiel<\/p>\n<p>Unterschied zwischen equals(\u2026) und deepEquals(\u2026):<\/p>\n<pre>int[][]\u00a0a1\u00a0=\u00a0{\u00a0{\u00a00,\u00a01\u00a0},\u00a0{\u00a01,\u00a00\u00a0}\u00a0};\n int[][]\u00a0a2\u00a0=\u00a0{\u00a0{\u00a00,\u00a01\u00a0},\u00a0{\u00a01,\u00a00\u00a0}\u00a0};\n System.out.println(\u00a0Arrays.equals(\u00a0a1,\u00a0a2\u00a0)\u00a0);\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0false\n System.out.println(\u00a0Arrays.deepEquals(\u00a0a1,\u00a0a2\u00a0)\u00a0);\u00a0\/\/\u00a0true\n System.out.println(\u00a0a1[0]\u00a0);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0zum\u00a0Beispiel\u00a0[I@10b62c9\n System.out.println(\u00a0a2[0]\u00a0);\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u00a0zum\u00a0Beispiel\u00a0[I@82ba41<\/pre>\n<p>Dass die Methoden unterschiedlich arbeiten, zeigen die beiden letzten Konsolenausgaben: Die von a1 und a2 unterreferenzierten Arrays enthalten die gleichen Elemente, sind aber zwei unterschiedliche Objekte, also nicht identisch.<\/p>\n<p>Hinweis<\/p>\n<p>deepEquals(\u2026) vergleicht auch eindimensionale Arrays:<\/p>\n<pre>Object[]\u00a0b1\u00a0=\u00a0{\u00a0\"1\",\u00a0\"2\",\u00a0\"3\"\u00a0};\n Object[]\u00a0b2\u00a0=\u00a0{\u00a0\"1\",\u00a0\"2\",\u00a0\"3\"\u00a0};\n System.out.println(\u00a0Arrays.deepEquals(\u00a0b1,\u00a0b2\u00a0)\u00a0);\u00a0\/\/\u00a0true<\/pre>\n<p>class\u00a0java.util.Arrays<\/p>\n<ul>\n<li>staticbooleanequals(XXX[]a,XXX[]a2)<br \/>\nVergleicht zwei Arrays gleichen Typs und liefert true, wenn die Arrays gleich gro\u00df und Elemente paarweise gleich sind. XXX steht stellvertretend f\u00fcr boolean, byte, char, int, short, long, double, float.<\/li>\n<li>staticbooleanequals(<strong>XXX<\/strong>[] a, int aFromIndex, int aToIndex, <strong>XXX<\/strong>[] b, int bFromIndex, int bToIndex)<br \/>\nVergleicht zwei Arrays, bleibt jedoch in den gew\u00e4hlten Ausschnitten. Neue Methoden in Java 9.<\/li>\n<li>staticbooleanequals(Object[]a,Object[]a2)<br \/>\nVergleicht zwei Arrays mit Objektverweisen. Ein Objekt-Array darf null enthalten; dann gilt f\u00fcr die Gleichheit e1==null ? e2==null : equals(e2).<\/li>\n<li>staticbooleandeepEquals(Object[]a1,Object[]a2)<br \/>\nLiefert true, wenn die beiden Arrays ebenso wie alle Unter-Arrays \u2013 rekursiv im Fall von Unter-Objekt-Arrays \u2013 gleich sind.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Die statischen Methoden Arrays.equals(\u2026) vergleichen, ob zwei Arrays die gleichen Inhalte besitzen; dazu ist die \u00fcberladene Methode f\u00fcr alle wichtigen Typen definiert. Wenn zwei Arrays tats\u00e4chlich die gleichen Inhalte besitzen, ist die R\u00fcckgabe der Methode true, sonst false. Nat\u00fcrlich m\u00fcssen beide Arrays schon die gleiche Anzahl von Elementen besitzen, sonst ist der Test sofort vorbei [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","_links_to":"","_links_to_target":""},"categories":[1],"tags":[],"class_list":["post-3698","post","type-post","status-publish","format-standard","hentry","category-allgemein"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3698","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/comments?post=3698"}],"version-history":[{"count":3,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3698\/revisions"}],"predecessor-version":[{"id":3701,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/posts\/3698\/revisions\/3701"}],"wp:attachment":[{"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/media?parent=3698"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/categories?post=3698"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tutego.de\/blog\/javainsel\/wp-json\/wp\/v2\/tags?post=3698"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}