方法只能改变引用类型的值,而不能改变引用类型的地址和基本类型的值。也就是说方法只能改变堆内存中的值,而不能改变栈内存中的值。实例变量都是保存在堆内存里的。不管是引用类型还是基本类型。所有的引用类型的值都是保存在堆内存里的。
特别注意:对基本类型是pass by value,而对引用类型则是pass by ref.
例如:
public class TestReference {
int i = 5;
int j = 6;
A a = new A();
public void changeIJ(int m, int n) {// 试图改变基本类型的参数的值
int z = 0;
z = m;
m = n;
n = z;
}
public void changeAB(A a1, A a2){ // 试图改变引用类型的参数的地址
A a = null;
a = a1;
a1 = a2;
a2 = a;
}
public void test(int c){ // 试图改变基本类型的参数的值
c = c + 6;
}
public void testA(A a) {// 试图改变引用类型参数的值
a.i = 100;
}
public static void main(String[] args) {
TestReference t = new TestReference(); // 构造本类的一个对象
int z = 5;
int y = 6;
A aa = new A(); // 定义A类的一个对象aa
t.testA(aa); // 改变对象aa的值
System.out.println(aa.i); // 输出aa的值(属性值)
A bb = new A(); // 再定义A类的一个对象bb
t.changeIJ(z, y); // 试图改变两个基本类型的值
t.changeAB(aa, bb);// 试图改变两个引用类型的地址
System.out.println(z);
System.out.println(y);
System.out.println(aa.i);
System.out.println(bb.i);
}
}
class A {
int i = 5;
};
输出结果如下:
100
5
6
100
5
可见,方法只能改变引用类型的值,而不能改变引用类型的地址和基本类型的值。
java视频教程