String和StringBuffer的传参问题

关于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 stub
		String 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 stub
		s1 = s2;
		s2 = s1+s2;
	}

	private static void change(StringBuffer sb1, StringBuffer sb2) {
		// TODO Auto-generated method stub
		sb1 = 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就可以自己看到结果了!如果解释的不够清楚欢迎交流沟通。

收到博友的建议说直接说sb1和sb2是局部变量有一些笼统,下面有再补充一下。首先局部变量大家应该都清楚,就是随着方法的调用而存在,方法调用结束就消失了。所以chang方法中的sb1,sb2的地址值来事main方法中传过来的sb1,sb2.但是对于chang方法中的sb1=sb2,只是将chang方法中sb1变量的地址改变了,但是并不影响main方法中的。而chang方法中sb2的内容改变是改变了常量池中的内容,进而影响了main方法中的sb2.方法中的变量是独立存在的,属于方法,他们的焦点是常量池中的数据,任何一方改变常量池中的值都会影响另一方,但是各自改变地址值是相互不影响的。不知道这样的解释可不可以,欢迎拍砖。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值