If compareTo iterated the bytes in reverse order, then it could be used in place of Arrays.equals as the basis of "equals".
The rationale for reversing the iteration (specifically for the purposes of equals) is that in the rare event of an accidental hashCode collision, it's better to start comparing the (later) bytes that were not used in the hash code. here's no point in starting the detailed equality check by re-checking the exact same prefix bytes.