I\'m having trouble understanding this question, and the explanation of the answer for an SCJP 1.6 self test question. Here is the problem:
class A { }
class
When attempting to determine which method to invoke, the compiler first looks for non vararg method (e.g. sifter(Object)
) before considering a vararg one (e.g. sifter(A[]...)
), when both of the methods belong to the same class (more or less).
Since an array is an Object
, the invocation of sifter(aa)
will match sifter(Object)
, hence not even considering sifter(A[]...)
.
Starting from Java 5, the compiler may "box" primitive, i.e. convert primitive values (e.g. int
) to their corresponding Object
(e.g. Integer
). So for sifter(6)
, the compiler converts the int 6
into an Integer 6
, thus it would match the sifter(Object)
method.