문제

arrays.deepequals (Object [], Object [])에 대해 알고 있지만 원시 유형 (배열 및자가 항폭의 기한 제한 사항에 대해서는 작동하지 않습니다. 이 관련 게시물).

이를 염두에두고 이것이 가장 효율적인 접근법입니까?

boolean byteArrayEquals(byte[] a, byte[] b) {
    if (a == null && b == null)
        return true;

    if (a == null || b == null)
        return false;

    if (a.length != b.length)
        return false;

    for (int i = 0; i < a.length; i++) {
        if (a[i] != b[i])
            return false;
    }
    return true;
}
도움이 되었습니까?

해결책

첫 번째 비교를 변경하십시오.

if (a == b)
    return true;

이것은 "두 가지 모두"사례를 포착 할뿐만 아니라 "배열 자체를 비교"케이스를 포착합니다.

그러나 더 간단한 대안을 위해 사용하십시오 Arrays.equals 각 원시 유형에 대한 과부하가 있습니다. (구현은 루프에서 배열 길이를 들어 올리는 것을 제외하고는 구현과 매우 유사합니다.

다른 팁

가장 효율적인 것은 도우미 방법을 사용하는 것입니다. 배열 클래스는 더 영리하게 구현 될 수 있기 때문입니다. 이 경우 사용하십시오

Arrays.equals(a, b);

이것이 다른 사람에게 도움이 될지 모르겠지만 이것은 효과가있는 것 같습니다.

        if(type == type_BooleanArray) {
            boolean eq = Arrays.equals((boolean[]) thisObj, (boolean[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_ByteArray) {
            boolean eq = Arrays.equals((byte[]) thisObj, (byte[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_ShortArray) {
            boolean eq = Arrays.equals((short[]) thisObj, (short[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_CharArray) {
            boolean eq = Arrays.equals((char[]) thisObj, (char[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_IntArray) {
            boolean eq = Arrays.equals((int[]) thisObj, (int[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_LongArray) {
            boolean eq = Arrays.equals((long[]) thisObj, (long[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_FloatArray) {
            boolean eq = Arrays.equals((float[]) thisObj, (float[]) thatObj);
            if(!eq) {
                return false;
            }
        } else if(type == type_DoubleArray) {
            boolean eq = Arrays.equals((double[]) thisObj, (double[]) thatObj);
            if(!eq) {
                return false;
            }
        } else {
            if(!thisObj.equals(thatObj)) {
                return false;
            }
        }

보기에 array.equals(otherArray) a array == otherArray, 당신이 기대할 수있는 것이 아닙니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top