To maintain backward compatibility, varargs is the last thing the compiler does to try and resolve a method call. Since the call NoSense.someMethod("1", x);can be resolved as someMethod(String a, Object[] things), it is resolved as such. He can do this because array types are covariant.
However, the call NoSense.someMethod("2", x, "extra");cannot be resolved as someMethod(String a, Object[] things)it therefore uses varargs to create new Object[]{x, "extra"}, which is then passed as the things parameter.