String和StringBuffer作为参数传递,相同的是都重写了父类Object的toString方法,所以展示出来的不是地址值,而是对象内容
以下是两者的不同:
一、String作为参数传递:因为没有new,所以内容只在方法区,有相同的字符就会指向常量池中同一个地址值,没有就会创建一个新的,
但是方法调用的时候,只在方法里发生变化,因为方法是在栈里面运行的,所以方法结束,就自动消失,不会对原来的内容发生永久改变,
sb1不变,sb2也不变!,所以外面的System.out.pringtln(),不会受到调用方法的影响
二、StringBuffer当作参数:因为new,在堆里面开辟一块内存空间,当调用方法时,sb2.append(sb1)改变的内容会被保留下来,
而sb1=sb2,这个赋值方法只是运行在栈里面,将sb2的地址值赋值给sb1,并没有直接改变了sb1所指的地址值内容,所以只有sb2在堆里面的内容发生了永久改变,
(总结:谁调用方法谁改变),所以在该方法fun1()后面的System.out.pringtln(sb1,sb2)中,sb1不变,只有sb2发生改变!