Javaにおけるコールバイバリューとコールバイレファレンスの違い


コールバイバリューは、値渡しとも呼ばれ、メソッドに渡されるパラメーターの値がコピーされて渡されます。つまり、呼び出し元の変数の値そのものではなく、そのコピーがメソッド内で使用されます。メソッド内でパラメーターの値が変更されても、呼び出し元の変数には影響を与えません。以下は、コールバイバリューの例です。

public class Main {
    public static void main(String[] args) {
        int number = 10;
        modifyValue(number);
        System.out.println("変更後の値: " + number);
    }

    public static void modifyValue(int value) {
        value = 20;
    }
}

上記の例では、modifyValueメソッドにnumberの値が渡されています。しかし、modifyValueメソッド内でvalueの値が変更されても、numberの値は変わりません。つまり、コピーされた値が変更されたので、呼び出し元には影響がありません。

一方、コールバイレファレンスは、参照渡しとも呼ばれ、メソッドに渡されるパラメーターの参照が渡されます。つまり、呼び出し元の変数への参照がメソッド内で使用されます。メソッド内でパラメーターの値が変更されると、呼び出し元の変数にも変更が反映されます。以下は、コールバイレファレンスの例です。

public class Main {
    public static void main(String[] args) {
        int[] numbers = {10, 20, 30};
        modifyArray(numbers);
        System.out.println("変更後の配列: " + Arrays.toString(numbers));
    }

    public static void modifyArray(int[] array) {
        array[0] = 100;
    }
}

上記の例では、modifyArrayメソッドにnumbers配列が渡されています。modifyArrayメソッド内で配列の最初の要素が変更されると、呼び出し元のnumbers配列にも変更が反映されます。

コールバイバリューとコールバイレファレンスの違いを理解することは、Javaプログラミングにおいて重要です。メソッド呼び出し時にどちらの方式が使用されるかによって、メソッド内でのパラメーターの変更が呼び出し元に影響を与えるかどうかが異なります。

その他のパラメーター渡しの方式や具体的なコード例についても説明できますので、必要に応じてお知らせください。