passando um array String como argumento

Um array String pode ser declarado e inicializado da seguinte maneira:

String[] str = {"A", "B"};

mas para um método que aceita um array String como argumento, por que o mesmo não pode ser usado lá?

Por exemplo: se no código abaixo, eu substituo a chamada para show () deshow(str); parashow({"A" "B"});, mostra um erro completo. Por quê?

public class StringArray {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String[] str = {"A", "B"};
        show(str);
    }
    static void show(String[] s) {
        System.out.println(s[0] + s[1]);
    }
}

Os erros do compilador mostrados são:

StringArray.java:9: illegal start of expression
                show({"A", "B"});
                     ^
StringArray.java:9: ';' expected
                show({"A", "B"});
                      ^
StringArray.java:9: illegal start of expression
                show({"A", "B"});
                         ^
StringArray.java:9: ';' expected
                show({"A", "B"});
                          ^
StringArray.java:9: illegal start of type
                show({"A", "B"});
                               ^
StringArray.java:11: class, interface, or enum expected
        static void show(String[] s) {
               ^
StringArray.java:13: class, interface, or enum expected
        }
        ^
7 errors

Usando tambémshow(new String[] {"A", "B"}); é permitido. Como énew String[]{"A", "B"} diferente de{"A", "B"} ao passá-los como argumentos de método? Thanx antecipadamente!

questionAnswers(8)

yourAnswerToTheQuestion