java 方法传参

java方法参数的传递过程,是一个值的复制过程而非传递过程:

1)参数类型为基本类型时,复制的是基本类型的值变量

2)参数类型为引用类型,复制的是引用变量

这是一段测试代码(1)

public static void main(String[] args) {

A a = new A(1);//对象1

swap(a);

System.out.println(a.getA());

}

public static void swap(A a){

System.out.println(a);

a=new A(2);//对象2

System.out.println(a);

}


证明:java方法参数的传递过程,是一个值的复制过程而非传递过程

如果传参过程是引用变量的传递,那么,经过swap方法后,a引用的应该是对象2的地址;然而结果并不是,在主方法中打印的值仍然为对象1中的属性值。

由此可证明方法传参过程是 值 (或引用变量)的复制过程。

这恰恰解释了一直困扰我的一个现象:

在方法中将对象的引用作为参数,方法体中对该变量作属性修改,会真实生效。而Integer\ String 等类型的变量作修改时却不生效。 那是因为我们自定义的对象提供了对属性修改的支持,而Integer String 等对象的value声明为final的,每次赋值操作会new一个新的对象,因此并没有修改之前引用对象的值。

所以:java方法参数的传递过程,是一个值的复制过程而非传递过程。

代码片段(2)

public class foo {

public static void main(String sgf[]) {

StringBuffer a=new StringBuffer(“A”);

StringBuffer b=new StringBuffer(“B”);

operate(a,b);

System.out.println(a+”.”+b);

}

static void operate(StringBuffer x,StringBuffer y) {

//这是在x引用的对象内容,更改会生效。由于main方法里的a变量也引用了该对象

x.append(y);

//由于参数是变量的复制,因此y=x并未将main方法中的b变量改变

y=x;

}

}

//输出结果是 AB.B

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。