マンガで分かる Java入門講座

第8章 メソッド
8-5. 参照型の引数

参照型の引数の場合の挙動と、その仕組みを紹介します。

● 参照型の引数と参照渡し

 参照型の引数に変数を設定した場合、メソッドに渡るのは値ではなく参照になります。

 そのため、メソッド内で、参照の本体を書き換えると、メソッド呼び出し元の変数の本体も、同じ物を参照しているので書き換わります。

 このように、メソッドに参照を渡すことを「参照渡し」と呼びます。

図)メソッドに変数を設定
┏━━┓  ┏━━┓   ┏━━━━━━━━━┓
┃変数┃──┃参照┃……→┃オブジェクト(本体)┃
┗━━┛  ┗━━┛   ┗━━━━━━━━━┛
        │
        │
        │
        │参照を受け取る
        ↓
┏メソッド━( 引数 )━┓
┃          ┃
┗━━━━━━━━━━┛

図)メソッド内で値を書き換え
┏メソッド━( 引数 )━┓
┃┏━━┓  ┏━━┓┃ 書き換え ┏書き換わった━━━┓
┃┃引数┃──┃参照┃………………→┃オブジェクト(本体)┃
┃┗━━┛  ┗━━┛┃      ┗━━━━━━━━━┛
┗━━━━━━━━━━┛

図)メソッドの呼び出し元で配列をダンプ
 あれ?
┏━━┓  ┏━━┓   ┏書き換わっている━┓
┃変数┃──┃参照┃……→┃オブジェクト(本体)┃
┗━━┛  ┗━━┛   ┗━━━━━━━━━┛

● 参照型の引数の挙動が分かるコード

 参照型の引数の挙動が分かるコードを以下に示します。メソッド内では、引数を利用して、オブジェクトの値(配列の中身)を書き換えています。

ソースコード)参照型の引数の挙動が分かるコード src/sample/MyClass.java
package sample;

public class MyClass {
    public static void plusOneArray(int[] array) {
        for (int i = 0; i < array.length; i ++) {
            array[i] ++;  // 各要素の値を1増やす
        }
    }
}

ソースコード)参照型の引数の挙動が分かるコード src/sample/Sample.java
package sample;

import java.util.Arrays;

public class Sample {
    public static void main(String[] args) {
        int[] array = {0, 1, 2};

        // 配列をダンプ
        System.out.println(Arrays.toString(array));

        // 全ての要素の値を1増やす
        MyClass.plusOneArray(array);

        // 配列をダンプ
        System.out.println(Arrays.toString(array));
    }
}

出力)参照型の引数の挙動が分かるコード
[0, 1, 2]
[1, 2, 3]

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/05/31  更新:2015/08/09  [Permalink]