Разница только в вызове метода. Вторая форма должна быть вызвана с массивом, первая форма может быть вызвана с массивом (точно так же как вторая, да, это действительно в соответствии со стандартом Java) или со списком строк (несколько строк, разделенных запятой) или без аргументов вообще (второй всегда должен иметь один, по крайней мере, ноль должен быть передан).
Это синтаксически сахар. На самом деле компилятор превращается
function(s1, s2, s3);
в
function(new String[] { s1, s2, s3 });
внутри.