В чем различия между массивами String [] args и String... args?
Запись вида methodName(T... args) называется varargs (Variable Arguments)
Удобство в том, что можно передавать сразу аргументы и не создавать массив и количество аргументом может быть 0 или N. Пример:public static void vargs(final String... strings) {
	System.out.println(strings);
}

public static void arrs(final String[] strings) {
	System.out.println(strings);
}

public static void main(final String... args) {
	vargs(); // ok
	vargs("1", "2"); // ok
		
	arrs(); // compilation error
	arrs(new String[] {"1", "2"}); // ok
}
Есть пара моментов: методы с varargs нельзя перегружать и varargs должен быть последним аргументомpublic static void manyParams(final String... strings, final Integer number) {
	// compilation error
}

public static void manyParams(final Integer number, final String... strings) {
	// ok
}
https://docs.oracle.com/javase/1.5.0/docs/guide/la...
Отличие:public static void method1(final String arg0, final String[] arg1, final String arg2) {
	
}

public static void method2(final String arg0, final String... arg1, final String arg2) {
	
}
Метод 1 компилируется, 2 нет.
P.S.: Overloading тоже не работает.