共有渡しなどでググってみましたがまだ理解できません
比較のためC++の例を。こっちが頭にあるから混乱してたのかもしれない
#include <stdio.h>
struct T{ int a; T(int i){a=i;}};
T f(T a){ return a;}
int main(){
T a(10);
T b=f(a); //javaと違ってbのアドレスは変わる。ここの挙動がjavaの疑問点
T c = a; //これもjavaと違って新しいコピーが作られる。コピコン
T* d = &a; //ポインタ。同じアドレスをさす
T& e = a; //参照。同じアドレスをさす
printf("%d\n%d\n%d\n%d\n%d\n",&a,&b,&c,d,&e);
return 0;
}
実行結果
286472060
286472064
286472068
286472060
286472060