理解的不对。。这里面是传入的两个对方。。s1 s2都是已经建立完成的对象。。。所以show方法里面,不涉及到新建对象的。。。
刚刚和我们班里面的小伙伴们探讨了一下。得到了答案。。我整理下说出来,看看你能不能看懂。。。
最初的时候,这个show()方法里面, s1=s1.append(s2); s2=s1; ,
有这两个,这里面append方法,
是在常量池进行操作的,直接找到了s1,然后StringBuffer是一个容器,
这儿找到这个容器,然后往里面放了个字符串s2 ,
这个直接在常量池修改的,就相当于修改s1本身,,所以s1本身被修改了,再把s1打印出来,,自然也就是修改后的s1了。。
而后面s1= s2 ,或者我测试的时候,改成s2 = s1 ,这样执行的结果其实是一致的,看起来,好像这一行都没有执行。。。其实这一行是执行的了,只是这个是赋值,是在栈内存中执行的,执行完成之后,如果方法内,有输出语句,就把赋值后的字符串打印出来,而如果没有输出语句,则看是否有return方法,如果有return方法,则把需要返回的值,返回出去。。
而这里是void类型,又没有返回值,所以这儿赋值后的s1 ,没有被返回,然后这时候show()方法执行完毕,栈内存被释放了,而这里s1没有被返回,所以s1 还是append修改后的值。。。s2还是没变化。。这儿s2 = s1 ,把s1赋值给s2 ,也是一样的,没有返回值,赋值的东西,在栈内存,执行完show()方法,就被释放了,所以s2的值没有改变。。。
希望楼主仔细看一看,看看能否看懂??? |