Przekazanie argumentu typu prostego

 

Przekazanie argumentu typu prostego:

01  class SimpleTypeArgumentClass {
02     static void modifyArg( int arg ) {
03        arg++;
04        System.out.println( "arg in SimpleTypeArgumentClass: " + arg );    // arg in SimpleTypeArgument: 2
05     }
06  }
07  
08  public class SimpleTypeArgumentTestProgram {
09     public static void main( String[] args ) {
10        int arg = 1;                                       //arg == 1
11        SimpleTypeArgumentClass.modifyArg( arg );
12        System.out.println( "arg in Program: " + arg );    // arg in Program: 1
13    }
14  }

Argument arg zosatał przekazany jako kopia wartości. W chwili wywołania metody SimpleTypeArgumentClass.modifyArg( int arg ) została utworzony na stosie nowa zmienna int arg dla metody modifyArg( int arg). W efekcie modyfikacja wartości tej zmiennej nie wpłynęła na wartość oryginalnej zmiennej arg w metodzie SimpleTypeArgumentClass.main.

 

 

Sekwencja zdarzeń:

 

  1. Sytuacja początkowa. Sterta i stos są puste. Nie utworzono dotychczas żadnego obiektu ani zmiennej.

     

  2. Wiersz 10. W klasie SimpleTypeArgumentTestProgram w metodzie main deklarujemy zmienną arg i inicjujemy ją przy użyciu wartości 1. Zmienne są zapisywane na stosie. Dlatego na stosie pojawia się element o wartości 1 odpowiadający zmiennej arg.

     

  3. Wiersz 11. Wywołanie metody statycznej SimpleTypeArgumentClass.modifyArg( int arg ). Na stosie tworzona jest kopia zmiennej arg - pojawia się element o wartości 1, związany z parametrem arg w metodzie SimpleTypeArgumentClass.modifyArg( int arg ).

     

  4. Wiersz 03. Sterowanie programu przechodzi do metody modifyArg( int arg ) w klasie SimpleTypeArgumentClass. W metodzie SimpleTypeArgumentClass.modifyArg( int arg ) zwiększamy wartość parametru arg. Na stosie w drugim elemencie następuje zmiana wartości.

     

  5. Wiersz 12. Sterowanie programu wraca do metody main w klasie SimpleTypeArgumentTestProgram. Na stosie znika utworzona uprzednio kopia zmiennej arg. Wyświetlamy wartość lokalnej zmiennej arg. Wartość oczywiście nie uległa zmianie, ponieważ zmieniona została tylko kopia tej zmiennej.