Firstly, it's important to note that the null value is convertible to both Object and Object[], so both methods are applicable. Then it's just a matter of overload resolution. That's described in section 15.12 of the JLS, and section 15.12.2.5 in particular talks about finding "the most specific method", which includes:
The informal intuition is that one method is more specific than another if any invocation handled by the first method could be passed on to the other one without a compile-time type error.
That's the case here: any invocation of show(Object[]) can be passed to show(Object) without a compile-time type error, therefore show(Object[]) is more specific than show(Object), so overload resolution picks show(Object[]) to invoke.
To invoke show(Object) you just have to cast the null to Object, to stop the show(Object[]) method from being applicable:
ss.show((Object) null);