赵利斌 发表于 2013-5-12 21:23
不是说局部变量和成员变量
这个是这么回事 str1.append(str2)方法是将两个字符串连接之后返回给str1这 ...
这个问题还真是局部变量和成员变量的关系。结合上楼的代码
- public class MyClass {
- static void aMethod(StringBuffer sf1, StringBuffer sf2) {
- sf1.append(sf2);
- sf2 = sf1;
- System.out.println(sf1);
- System.out.println(sf2);
- }
- public static void main(String[] args){
- StringBuffer sf1 = new StringBuffer("A");
- StringBuffer sf2 = new StringBuffer("B");
- aMethod(sf1,sf2);
- System.out .println(sf1+ ":"+sf2);
- }
- }
复制代码 可以看出 在方法内的sf1和sf2都变成了AB,但是为什么主函数里sf2还是原来的值呢?产生这个问题的原因是因为append(),该方法的api文档说此方法会在 this(目标)对象上实现同步,就是说执行方法aMethod内部的sf1.append(sf2);形参变化的同时,实参sf1也同步变成了AB。所以产生上面效果。 |