> On 4 Nov 2015, at 22:41, Paul Sandoz <paul.san...@oracle.com> wrote:
> 
>> The null handling choice seems arbitrary.
> 
> I wanted Arrays.equals to be consistent with the Comparable accepting 
> Arrays.compare and Arrays.mismatch, so it was a coin toss between nulls first 
> and nulls last, hence that choice is propagated to Objects.compare, which is 
> consistent with Objects.equals.
> 

Now i recall some more details on the decision I took. Less of a coin toss than 
it first appears.

Null array refs are also supported for Arrays.compare, again so as to be 
consistent with Arrays.equals. And it’s “natural” to consider a null array ref 
to be less than a non-null array ref value, since null is essentially 0 bits 
set, and by logical progression that can apply to any ref value.

So there are two forces pushing the design in different directions:

1) null-consistency with Arrays.equals behaviour, the current approach (and 
note that Arrays.mismatch does not support null array refs, and nor do the 
sub-range methods); and

2) consistency with Arrays.sort/binarySearch/TreeMap, where null array refs 
would not be supported and null elements would only be supported when an 
explicit null-supporting Comparator is used.

Would developers expect:

  Arrays.equals(a, b) == (Arrays.compare(a, b) == 0)

or:

  Arrays.compare(a, b) // potentially throws NPE
  Arrays.equals(a, b) == (Arrays.compare(a, b, 
Comparator.nullsFirst(Comparator.naturalOrder())) == 0)
  Arrays.equals(a, b) == (Arrays.compare(a, b, 
Comparator.nullsLast(Comparator.naturalOrder())) == 0)

?

Paul.

> The other solution, as you suggest out, is to ditch support Comparable null 
> values, where a certain choice is picked. for the relevant Comparable 
> accepting Arrays methods. That would be more consistent with existing 
> operations on Comparables, such as Arrays.sort etc.  and for consistency with 
> Arrays.equals a null accepting Comparator would need to be used with the 
> relevant methods on Arrays.
> 
> Hmm… now you have me rethinking this :-) thoughts?
> 
> Paul.
> 
>> Nulls last or nulls disallowed would be equally valid. As usual I favour 
>> nulls disallowed.
>> 

Reply via email to