プリミティブ型と参照型をメソッドに渡した際の変化の違いを示すコード例です。
class Data { int value = 10; }
public class PassByValueExample {
static void changePrimitive(int num) {
num = 99; // コピーを書き換えても元の変数は不変
}
static void changeObject(Data d) {
d.value = 99; // 参照先のオブジェクトのフィールドを変更 (呼び出し元に影響!)
d = new Data(); // 変数dに新しい参照を代入 (呼び出し元の参照先は変わらない)
}
public static void main(String[] args) {
int x = 10;
changePrimitive(x);
System.out.println(x); // 10 (変化なし)
Data data = new Data();
changeObject(data);
System.out.println(data.value); // 99 (内部フィールドは変更された)
}
}