2016-07-15 14 views
1

Ich habe einen CodeErstellen von Arrays in einer Zeile

String ejgStr[] = new String[][]{{null},new String[]{"a","b","c"},{new String()}}[0] ; 
System.out.println(ejgStr[0]); 

die ohne Fehler kompiliert. Von dem, was ich verstehe, können Sie kein Array mit nicht übereinstimmenden eckigen Klammern erstellen.

Auf der linken Seite haben wir String ejgStr [], die sich auf der rechten Seite 1-D-Array und

haben wir String [] [] {einige array} [0], die 2-D Array

Diese scheinen unterschiedliche Dimensionen zu haben, aber warum kompilieren sie erfolgreich?

+0

Besser verwenden Sie 'String [] ejgStr ='. Die andere erlaubte Schreibweise wurde für die Kompatibilität mit C/C++ hinzugefügt und ist ein totales Werbegeschenk für einen Anfänger oder C/C++ - Programmierer. ;) –

Antwort

1

Sie ordnen dem ejgStr-Reference ein 1D-Array zu. Wenn Sie am Ende der ersten Anweisung nachsehen, sehen Sie, dass Sie einen [0] Index angegeben haben, was bedeutet, dass Sie Ihrer Referenz das erste Array (Position 0) zuweisen. Wenn Sie die [0] entfernen, erhalten Sie einen Kompilierungsfehler.

1

new String[][]{...} ist ein 2D-Array.
new String[][]{...}[0] ist das erste Element eines 2D-Arrays, das ein 1D-Array ist.
Das ordnen Sie String ejgStr[] zu.

2

Sie ordnen der ersten Dimension eines inline zweidimensionalen String[][] Arrays ein eindimensionales Array String[] zu. Haben ein Bemerkungen aussehen:

String ejgStr[] = 
    new String[][] { 
        { null },     // a null 1D String array 
        new String[] {"a","b","c"}, // a 1D String array containing a,b,c 
        { new String() }   // a String array containing empty String 
        }[0];       // access the { null } 1D array 

Ich erwarte, dass Ihre Zuordnung zu tun dies äquivalent zu sein:

String ejgStr[] = { null }; 
-1

String ejgStr[] ist nur ein reference auf ein variable in heap space. Sie zeigen auf erste zweidimensionale zweidimensionale Array mit [0] und machen Sie eine Referenz davon in ejgStr[]. Dies ist nicht üblich, um 1D aus 2D-Array zu bekommen, aber Sie können es tun, wenn Sie brauchen, und natürlich wird es nicht kompilieren Fehler.

+0

Warum bekomme ich die Stimme runter? es ist wahr OP, nutze das;) –

Verwandte Themen