① 咨询java高手,对象数组作为方法参数时的引用传递的问题
方法一其实也是按引用传递,但是千万千万要注意,你要修改的是“对象的值”,而不是“对象引用的值”。形参和实参对应的是对象的引用地址,所以这句写得很有问题: str1=str2;
你这里是试图将str1的值用str2代替, 但是这里的str1是形参,当外面传入了一个实参的对象引用是,你只是将内部的形参的引用改掉了,而没有修改实参的内容...这样在内部是把str1,str2对调了,但是外部实参的对象引用没有变,还是原来的值。
如果要把该方法生效,可以修改方法1如下:
public void SwapString1(StringBuffer str1, StringBuffer str2) {
StringBuffer str3 = new StringBuffer();
str3.append(str1.toString());
str1.replace(0, str2.toString().length(), str2.toString());
str2.replace(0, str3.toString().length(), str3.toString());
}
str1=str2;
② Java 为什么字符数组名无法作为引用来传递
因为你在 deleteRepeats方法中 charArr=str.toCharArray();这一步进行的时候,他根本不是在原有数组上进行修改,而是将方法内的局部变量charArr指向了一个数组,这个数组是toCharArray()生成的。而原有的数组自然是不变。
误区1.你以为charArr是一个对象,其实charArr只是一个引用。charArr=str.toCharArray();改变的是引用,没有改变引用指向的对象。
=运算符,只改变了引用,没有改变任何对象,原数组没有改变,新数组也不是=运算符生成的。
误区2.你以为方法内的charArr和main中的charArr是一个引用,其实他们是两个引用只不过,一开始指向一个数组,charArr=str.toCharArray();执行过之后,改变了deleteRepeats方法charArr引用。 使其指向了一个新数组。