`
hz_chenwenbiao
  • 浏览: 996205 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java的值传递和引用传递

阅读更多

 

函数参数的传递分为两种:“值传递”和“引用传递”.
“值传递”—传递原参数的
拷贝, 基本数据类型参数,都是值传递;函数内部修改此参数,则原数据不变.
“引用传递”—传递原参数本身, 对象参数,则为引用传递(
这个是引用地址的拷贝);函数内部修改此参数,则原对象更改.

注意:JAVA中函数参数的传递为值传递。参数为对象时,传递的是原参数引用的拷贝,这个引用的拷贝同样会指向原对象。因此,在函数中对对象参数的修改,能够体现到原对象。

所以从java对传递参数做副本拷贝的角度来讲:java的传递都是值传递!


Java 编程语言只有值传递参数.
当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用.对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.


看下面示例:
package myPage;

public class ChangeTest {
	public static void main(String[] args){
		String abc = "before";
		change(abc);
		System.out.println(abc);
	}
	
	public static void change(String string){
		string = "after change";
	}
}
 将abc串经change方法修改后打印出来仍然是原来的"before"值,因为对象的传递是指向对象的地址的拷贝,那么,对这个新拷贝的地址再赋值是不会影响到原来的地址的内容。再加上String和Integer等这些都属于final类型,所以它们的值是不可以改变的。

再看下面示例:
package myPage;

public class ChangeTest {
	
	private String abc;
	
	public String getAbc() {
		return abc;
	}
	public void setAbc(String abc) {
		this.abc = abc;
	}

	public static void change(ChangeTest changeTest , String info){
		changeTest.setAbc(info);
	}
	
	public static void main(String[] args){
		ChangeTest test = new ChangeTest();
		test.setAbc("before");
		change(test, "after change");
		System.out.println(test.getAbc());
	}
}
 
第二个例子,我们是将changeTest引用对象交给change方法,而在change方法里会获得一个changeTest引用的拷贝,在change方法里对changeTest引用所指向的对象进行操作,所以changeTest的所指向的对象值会改变。
分享到:
评论
1 楼 stone5751 2011-03-24  
收教了!~

相关推荐

Global site tag (gtag.js) - Google Analytics