一道面试题所想起的

public class Test1{

	public static void exchange(char[] arr, String str){

		arr[0] = 'k';

		arr[1] = 'o';

		str = str + " world";  //这里生成了一个新的对象("hello world"),副本已经改变指向

	}

	public static void main(String[] args){

		char [] array = {'o', 'k'};

		String str = "hello";

		Test1.exchange(array, str);

		System.out.println(array[0] + array[1] + str);

	}

}

//输出结果:

//	kohello

//



public class Test2{

	public static void exchange(int i, StringBuffer strBuf){

		i = -1;

		strBuf.append("world");

	}

	public static void main(String[] args){

		int m = 0;

		StringBuffer str = "hello";

		Test2.exchange(array, str);

		System.out.println(m + str.toString());

	}

}

//输出结果:

//	0hello world

//
本题理解的重点在于:
Java是传值的而非传引用(指针)(Practical Java 侯捷 译 第一章第一节),不论参数是引用还是基本数据类型,都会在函数体内产生参数的副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值