好像有点明白了,其实主要原因还是因为单独封装了show方法的原因吧,因为show方法会在栈内存另外生成StringBuffer s1和StringBuffer s2(地址值和main一样的?),并且执行到s2=s1的时候只是show方法里的s2的地址值指向了s1,主函数里的s2指向还是没变。
如果把show主体拖出来到主函数上面去,结果s1和s2都是hellojavahellojava。
还有代码里的容器添加动作是次要的,甚至跟StringBuffer也没什么关系吧?可以简化代码如下,并且不影响楼主要表达的问题:
- public class Test
- {
- public static void main(String[] args)
- {
- StringBuffer s1 = new StringBuffer("hello");
- StringBuffer s2 = new StringBuffer("java");
-
- show(s1,s2);
- System.out.println("=================");
-
- System.out.println(s1);
- System.out.println(s2);
- }
- public static void show(StringBuffer s1 ,StringBuffer s2)
- {
-
- s2 = s1;
-
- System.out.println("S2---"+s2);
- System.out.println("S1---"+s1);
-
- }
- }
复制代码
|