Chapter 17

メソッドの注意点(引数のデータ型によるコピーの違い)

KeitoYuasa
KeitoYuasa
2023.02.18に更新
このチャプターの目次

メソッドで受け取る値の違い

データ型 メソッドが受け取るデータ
基本データ型 値のコピー
参照型 メモリアドレスのコピー

以下では、データ型によるメソッドが受け取る値の違いの例を示す。
基本データ型を渡した場合、メソッドはその値のコピーを受け取って処理する。
それに対し、参照型を渡した場合、メソッドはその参照先のコピーを受け取って処理を行う。そのため、メソッド内で処理する値と引数の値の参照先が同じになるため、実行後は上書きされてしまう。

参照型の引数において、その受け取った値をもとにメソッド内で処理を行う場合は注意が必要。
「値自体のコピーではなく、参照型のコピーになるため値自体も書き換わってしまう。」

Training.java
class Test{
    //基本データ型の受け取り
    int methodA(int i){
        i += 10;
        return i;
    }

    //参照型の受け取り
    int methodB(int[] array){
        array[0] += 10;
        return array[0];
    }
}

class Training {
    public static void main(String[] args){
        Test t = new Test();
        int i = 10;
        int[] array = {10};

        System.out.println("メソッドに渡す前の変数:" + i);
        System.out.println("メソッドに渡す前の変数:" + array[0]);
        
        //メソッドの実行
        System.out.println(t.methodA(i));
        System.out.println(t.methodB(array));
        
        
        System.out.println("メソッド実行後の変数:" + i);
        System.out.println("メソッド実行後の変数:" + array[0]); //渡した値も更新されている
    }
}

//出力結果:
//メソッドに渡す前の変数:10
//メソッドに渡す前の変数:10
//20
//20
//メソッド実行後の変数:10
//メソッド実行後の変数:20