String和StringBuffer的传参问题

来源:互联网 发布:怪物猎人ol数据库 编辑:程序博客网 时间:2024/06/05 00:43

关于String和StringBuffer的区别这里不再赘述,主要详细说一下他们作为形参的区别吧!
String虽然是非基本类型,但是最终传递的是一个内容的拷贝,在其他方法中对其操作不会影响实参值,具体的可以参看下面的网址:
http://www.cnblogs.com/alexlo/p/4106394.html
StringBuffer传递的确实地址值,在方法中对其操作就会改变其实参的内容。下面附上一段代码:

public class StringBufferDemo {public static void main(String[] args) {// TODO Auto-generated method stubString s1 = "hello";String s2 = "world";System.out.println(s1+"-------"+s2);change(s1,s2);System.out.println(s1+"-------"+s2);StringBuffer sb1 = new StringBuffer("hello");StringBuffer sb2 = new StringBuffer("world");System.out.println(sb1+"-------"+sb2);change(sb1,sb2);System.out.println(sb1+"-------"+sb2);}private static void change(String s1, String s2) {// TODO Auto-generated method stubs1 = s2;s2 = s1+s2;}private static void change(StringBuffer sb1, StringBuffer sb2) {// TODO Auto-generated method stubsb1 = sb2;sb2.append(sb1);/*System.out.println("----------------");System.out.println(sb1);System.out.println(sb2);System.out.println("----------------");*/}}


运行结果如下:
hello-------world
hello-------world
hello-------world
hello-------worldworld
你可能会问StringBuffer不是传的是地址吗?那为什么sb1的内容不是world而是hello内,我也产生了同样的问题。后来通过查阅资料请教他人,终于理解了。

下面我用图给大家解释一下,图不太标准,但意思好理解。



大家可以再chang()方法中输出sb1和sb2就可以自己看到结果了!如果解释的不够清楚欢迎交流沟通。

3 0