pasando una matriz de cadenas como argumento

Una matriz de cadenas se puede declarar e inicializar de la siguiente manera:

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

pero para un método que acepta una matriz de cadenas como argumento, ¿por qué no se puede usar el mismo allí?

Por ejemplo: si en el código de abajo, sustituyo la llamada a show () deshow(str); ashow({"A" "B"});, muestra error compilador. ¿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]);
    }
}

Los errores del compilador que se muestran son:

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

También usandoshow(new String[] {"A", "B"}); esta permitido. Como esnew String[]{"A", "B"} diferente de{"A", "B"} ¿Cuándo pasarlos como argumentos de método? Gracias de antemano!

Respuestas a la pregunta(8)

Su respuesta a la pregunta