Java: resolução de método sobrecarregada e varargs - exemplo confuso

Apenas quando eu pensei que tinha entendido JLS15.12 conforme aplicado a varargs, aqui está este exemplo:

package com.example.test.reflect;

public class MethodResolutionTest2 {
    public int compute(Object obj1, Object obj2) {
        return 42;
    }   
    public int compute(String s, Object... objects)
    {
        return 43;
    }

    public static void main(String[] args) {
        MethodResolutionTest2 mrt2 = new MethodResolutionTest2();
        System.out.println(mrt2.compute("hi",  mrt2));  
        System.out.println(mrt2.compute("hi",  new Object[]{mrt2}));    
        System.out.println(mrt2.compute("hi",  new Object[]{mrt2, mrt2, mrt2}));
    }
}

que imprime

42
43
43

Entendo a primeira linha: JLS15.12 diz que a resolução do método ocorre em fases, e as fases 1 e 2 ignoram os métodos varargs para descobrir se há um método compatível, com a fase 3 (incluindo varargs) acontecendo apenas se as fases 1 e 2 falharem. (Veja o JLS eesta questão SO.) Entãocompute(String s, Object... objects) sempre é ignorado secompute(Object obj1, Object obj2) aplica-se.

Mas não entendo por que 43 é impresso para as outras duas linhas. AObject[] também é uma instância de umObject, então por que ele corresponde ao método vararg

editar

...e ist

Object arg2 = new Object[]{mrt2};
System.out.println(mrt2.compute("hi", arg2));   

prints42.

questionAnswers(2)

yourAnswerToTheQuestion