Olá Gabriel,
Bom vamos por partes.
Quando você cria um array: String[] i = new String[0];
Não teremos nenhum erro de compilação pois é possível criar um array de 0 posições, porém se você fizer i[0] = "1"; irá aparecer um erro pois você está tentando acessar a posição 1 de um array que não tem posições.
Agora quando eu criei o String[] i = new String[-1];apesar de não dá erro de compilação deu erro de execução (Exception in thread "main" java.lang.NegativeArraySizeException).
Quando ao que você disse sobre o argumento recebido na classe, está correto, irá sair justamente o que você escreveu.
Sobre a primeira parte, os arrays de posições 0 e -1, faça o teste aí na sua casa, verifica se realmente o que eu escrevi procede, sempre que temos essas dúvidas é interessante tentar implementar um código.