در جاوا دو نوع Call-by-reference و Call-by-value داریم. مورد اول int چون primitive است از call-by-value استفاده میشه.
مورد دوم چون object است از Call-by-reference استفاده میشه. اما چون آبجکت Integer, String,... از نوع immutable هستند، شما نمیتونید محتوای آبجکت رو تغییر بدید، بلکه با هر تغییر آبجکت جدیدی ساخته میشه و اون آبجکت اولی نیست.
البته این که داخل یک متد، یک آبجکت پارامتر رو هم Assign کنید (x=...) چه immutable باشه چه mutable تفاوتی نداره و آبجکت اول تغییر نمیکنه. در صورتی که آبجکت شما mutable باشه و بتونید فیلدهای اون رو تغییر بدید مثل setValue(...) اونموقع آبجکت جدیدی ساخته نمیشه و آبجکت اولیتون تغییر میکنه.
شما این مفاهیمی که گفته شد رو تو اینترنت سرچ بزنید، اگر مفهوم نبود بگید تا با رسم شکل توضیح بدم، قابل فهمتره
اینم یه مثال:
public static void main(String[] args) {
Integer x=1,y=2;
System.out.println("X="+x+", Y="+y);
swap(x,y);
System.out.println("X="+x+", Y="+y);
}
public static void swap(Integer first,Integer second){
Integer temp=first;
first=second;
second=temp;
}
خروجی:
X=1, Y=2
X=1, Y=2