Varargs:
public static void foo(String... string_array) { ... }
versus
Single array param:
public static void bar(
The main reason not to specify everything as varargs is that it doesn't always make sense. For example, if InputStream.read(byte[]) where defined as `read(byte...) then the following call would be valid:
myInputStream.read(0, 1, 2, 3);
This would create a 4-element byte array, pass it in and then discard it.