关于方法中的参数传递问题有几个说法,虽然有各种说法,但是总体来说都是正确的,只是从不同的方面来说的;
(1)、参数传递都是传值(不管是基本数据类型还是引用数据类型都是传递的值,当然是“值”和“地址值”都算是值的情况下)
(2)、在方法中改变基本数据类型的值不会改变传递的这个基本数据类型的值,因为在方法传递基本数据类型的时候传递的只是这个值的副本,对原来的值没有影响,
改变传递的引用数据类型的值改变了引用数据类型指向的值。
在此处应该提示无论传递的是基本数据类型还是引用数据类型,传递的都是一个副本,只是这个副本是值还是地址值的问题
改变引用数据类型的值的情况只是用了这个值中的一些方法的情况下,如果是传递的两个引用数据类型的情况下,
下面这种改变的方式和传递基本数据类型没什么不同,并不会对两个引用数据类型的值有什么影响
public static void swap(StringBuffer sb1,StringBuffer sb2) {
sb1.append("a");
sb2=sb1;
}
上面的情况中,在方法外面的两个StringBuffer只有sb1的值会发生改变,sb2的值并不会发生改变,
因为在sb1改变的时候是用了StringBuffer中的append();方法,
而sb1赋值给sb2的时候做出改变的只是sb1的副本赋值给了sb2的副本,和基本数据类型的情况相似
ps:综合上面的情况我自认为基本数据类型的值在方法内改变不影响外面的值的原因是基本数据类型不是对象(不是包装类型的情况)没有方法,
如果传递的是包装类型的情况下,用了其中的方法改变了他们,这就和引用数据类型的情况一样了。