实际代码
public class demo8 {
void fun1(int i, int j) {
i = i + 5;
j = j + 5;
System.out.println("fun1-i:" + i);
System.out.println("fun1-j:" + j);
}
void fun1(P y) {
y.i = y.i + 5;
y.j = y.j + 5;
System.out.println("fun1-y-i:" + y.i);
System.out.println("fun1-y-j:" + y.j);
}
public static void main(String[] args) {
demo8 x = new demo8();
int i = 10;
int j = 20;
x.fun1(i,j);
System.out.println("main-i:" + i);
System.out.println("main-j:" + j);
System.out.println("================");
P y = new P();
y.i = 10;
y.j = 20;
x.fun1(y);
System.out.println("main-y-i:" + y.i);
System.out.println("main-y-j:" + y.j);
}
}
class P {
int i;
int j;
}
具体的解析
当方法中参数是基本类型时:
在栈区储存
在栈区中创建参数的副本
对副本进行操作
结论:基本类型的值在操作后原始的值并没有改变
当方法中参数是类类型(引用类型)时:
在栈区储存类(对象)在堆区的地址,在堆区储存具体的类的属性和方法
在栈区创建类在堆区的副本,并且这个副本还是指向之前的堆区地址
对类在堆区储存的属性和方法进行操作
结论:类类型的值在操作后,原始的值会发生变化