java中参数的传递方式

class TestMain {
	/**
	 * 测试java中参数的传递方式
	 * 
	 * @param args
	 */
	public static void main(String[] args) {

		StringBuffer strBuf1=new StringBuffer("default1 ");
		StringBuffer strBuf2=new StringBuffer("default2 ");
		StringBuffer strBuf3=new StringBuffer("default3 ");
		
		do1(strBuf1,strBuf2);

		strBuf3=new StringBuffer("New String3");
		
		System.out.println("strBuf1:"+strBuf1);
		System.out.println("strBuf2:"+strBuf2);
		System.out.println("strBuf3:"+strBuf3);
		
		TestObj tObj1=new TestObj();
		TestObj tObj2=new TestObj();
		do2(tObj1,tObj2);
		System.out.println("tObj1:"+tObj1.a + tObj1.str);
		System.out.println("tObj2:"+tObj2.a + tObj2.str);
	}
	static void do1(StringBuffer strBufA,StringBuffer strBufB){
//		如果是按值传参,将不会改变传入对象strBuf1的值;但结果显示已经改变了传入对象strBuf1的值
		strBufA.append(" New String1 ");
		
//		如果是按引用,将会改变传入对象strBuf2的值;但结果显示没有改变传入对象strBuf2的值?		
		strBufB=new StringBuffer(" New StringBuffer ");//注意:改变了strBufB的指内存地址,所以没有修改到传入对象strBuf1的值
		strBufB.append(" New String2+");
//按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址
	}
	static void do2(TestObj tObjA,TestObj tObjB){
		tObjA =new TestObj();		
		
		tObjB.a=200;
		tObjB.str=" New Str";
	}
}

class TestObj{
	int a=100;
	String str=" default";
}

/*
运行结果:
strBuf1:default1  New String1 
strBuf2:default2 
strBuf3:New String3
tObj1:100 default
tObj2:200 New Str

定义按值传递和按引用传递这两个术语是重要的。
按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。
因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。
按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,而不是值的副本。
因此,如果函数修改了该参数,调用代码中的原始值也随之改变。

在Java语言中
按值传递的数据类型:八种基本数据类型和String(事实上String也是传递的地址但比较特殊,因为他的内容改变就会产生新对象)
按址传递的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
*/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值