public static String toString(final Object[] array) {
        if (array == null) {
            return "null";
        }
        if (array.length == 0) {
            return "[]";
        }

        return CycleDependencyHandler.wrap(array, o -> {
            StringBuilder sb = new StringBuilder(32);
            sb.append("[");
            for (Object obj : array) {
                if (sb.length() > 1) {
                    sb.append(", ");
                }
                if (obj == array) {
                    sb.append("(this ").append(obj.getClass().getSimpleName()).append(")");
                } else {
                    sb.append(StringUtils.toString(obj));
                }
            }
            sb.append("]");
            return sb.toString();
        });
    }
@Test
    public void testToString() {
        Assertions.assertEquals("null", ArrayUtils.toString((Object[]) null));
        Assertions.assertEquals("[]", ArrayUtils.toString(new Object[]{}));
        Assertions.assertEquals("[\"1\", \"2\", \"3\"]", ArrayUtils.toString(new String[]{"1", "2", "3"}));

        Assertions.assertEquals("null", ArrayUtils.toString((Object) null));
        Assertions.assertEquals("[]", ArrayUtils.toString((Object) new Object[]{}));
        Assertions.assertEquals("123", ArrayUtils.toString(123));
        Assertions.assertEquals("[1, 2, 3]", ArrayUtils.toString((Object) new int[]{1, 2, 3}));
        Assertions.assertEquals("[\"1\", \"2\", \"3\"]", ArrayUtils.toString((Object) new String[]{"1", "2", "3"}));
    }