值传递(pass by value)

来源:互联网 发布:关口知宏结婚 编辑:程序博客网 时间:2024/04/30 04:51

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

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