值传递(pass by value)

方法只能改变引用类型的值,而不能改变引用类型的地址和基本类型的值。也就是说方法只能改变堆内存中的值,而不能改变栈内存中的值。实例变量都是保存在堆内存里的。不管是引用类型还是基本类型。所有的引用类型的值都是保存在堆内存里的。

特别注意:对基本类型是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视频教程 www.rjpx.net



posted @ 2012-03-02 15:12  JAVA教程  阅读(517)  评论(0编辑  收藏  举报