C言語の場合 C言語には値渡しとポインタ渡しがあったことを覚えていますか? void add(int a, int b){ a += b; } void addPointer(int *a, int b){ *a += b; } void main(){ int a = 5; add(a, 3); printf("a=%d\n", a); //値渡し addPointer(&a, 3); //ポインタ渡し printf("a=%d\n", a); } $ ./a.out a=5 ←がーん a=8 ←期待通り。わーい 値渡しは、コピーを関数に渡しているのに対して、 ポインタ渡しは、値がある場所を関数に渡しているためこういう動作になるわけです。 JAVAの場合 じゃあ、JAVAはどうなるのか、というと プリミティブ型は値渡し クラスは参照渡し ということになります。 具体的に見てみましょう。