private boolean equalObjects(Object o1, Object o2) {
        if (o1.getClass().isArray()) {
            int len = Array.getLength(o1);
            if (len != Array.getLength(o2)) {
                return false;
            }

            for (int i = 0; i < len; ++i) {
                Object item1 = Array.get(o1, i);
                Object item2 = Array.get(o2, i);

                boolean isEquals = item1 == null ? item2 == null : equalObjects(item1, item2);
                if (!isEquals) {
                    return false;
                }
            }

            return true;
        } else {
            return !o1.equals(o2) ? false : true;
        }
    }