diff --git a/src/main/java/org/assertj/core/api/AbstractByteArrayAssert.java b/src/main/java/org/assertj/core/api/AbstractByteArrayAssert.java
--- a/src/main/java/org/assertj/core/api/AbstractByteArrayAssert.java
+++ b/src/main/java/org/assertj/core/api/AbstractByteArrayAssert.java
@@ -768,7 +768,7 @@ public SELF usingDefaultElementComparator() {
    *                              or values are the same but the order is not.
    */
   public SELF containsExactly(byte... values) {
-    objects.assertEqual(info, actual, values);
+    arrays.assertContainsExactly(info, actual, values);
     return myself;
   }
 

diff --git a/src/test/java/org/assertj/core/api/bytearray/ByteArrayAssert_containsExactly_Test.java b/src/test/java/org/assertj/core/api/bytearray/ByteArrayAssert_containsExactly_Test.java
--- a/src/test/java/org/assertj/core/api/bytearray/ByteArrayAssert_containsExactly_Test.java
+++ b/src/test/java/org/assertj/core/api/bytearray/ByteArrayAssert_containsExactly_Test.java
@@ -12,15 +12,17 @@
  */
 package org.assertj.core.api.bytearray;
 
+import static org.assertj.core.api.Assertions.assertThat;
 import static org.assertj.core.test.ByteArrays.arrayOf;
 import static org.mockito.Mockito.verify;
 
 import org.assertj.core.api.ByteArrayAssert;
 import org.assertj.core.api.ByteArrayAssertBaseTest;
+import org.junit.jupiter.api.Test;
 
 /**
  * Tests for <code>{@link org.assertj.core.api.ByteArrayAssert#containsExactly(byte...)}</code>.
- * 
+ *
  * @author Jean-Christophe Gay
  */
 public class ByteArrayAssert_containsExactly_Test extends ByteArrayAssertBaseTest {
@@ -32,6 +34,11 @@ protected ByteArrayAssert invoke_api_method() {
 
   @Override
   protected void verify_internal_effects() {
-    verify(objects).assertEqual(getInfo(assertions), getActual(assertions), arrayOf(1, 2));
+    verify(arrays).assertContainsExactly(getInfo(assertions), getActual(assertions), arrayOf(1, 2));
+  }
+
+  @Test
+  public void invoke_api_like_user() {
+    assertThat(new byte[] { 1, 2, 3 }).containsExactly((byte) 1, (byte) 2, (byte) 3);
   }
 }

ByteArrayAssert#containsExactly(byte...) error message should state which elements were not found and not expected
#### Summary
`AbstractByteArrayAssert#containsExactly(byte...)` produces a sub-optimal error message where the expected and actual values are printed out as memory addresses of those arrays, while I would expect a summary of which elements were not found and which were not expected within the potentially long array.

#### Example

```
org.opentest4j.AssertionFailedError: 
Expecting:
 <[1, 2, 4]>
to be equal to:
 <[1, 2, 3]>
but was not.
Expected :[B@764faa6
Actual   :[B@4c1f22f3
```
In case of `int` arrays the error message is much more helpful:
```
java.lang.AssertionError: 
Expecting:
  <[1, 2, 4]>
to contain exactly (and in same order):
  <[1, 2, 3]>
but some elements were not found:
  <[3]>
and others were not expected:
  <[4]>
```

From the source code it's visible that the `byte` array specific `containsExactly` method calls  `objects.assertEqual(info, actual, values)`, but the `int` array specific `containsExactly` method calls `arrays.assertContainsExactly(info, actual, arrays.toByteArray(values))`. 

It hints that the `byte` array specific `containsExactly` method should have also called  `arrays.assertContainsExactly(info, actual, values);`

#### Reproduction steps:
AssertJ version 3.15.0
```
assertThat(new byte[] { 1, 2, 4 }).containsExactly((byte) 1, (byte) 2, (byte) 3);
```

org.org.assertj.core.api.bytearray.ByteArrayAssert_containsExactly_Test