为了账号安全,请及时绑定邮箱和手机立即绑定

明明都是引用类型,为啥StringBuffer和String给方法传递参数时,会有以下代码这样的区别?

明明都是引用类型,为啥StringBuffer和String给方法传递参数时,会有以下代码这样的区别?

偶然的你 2019-03-01 10:41:56
明明都是引用类型,为啥StringBuffer和String给方法传递参数时,会有以下代码这样的区别? package test_heima; public class Demo10 { public static void main(String[] args) { String s1 = "aaa"; System.out.println(s1); change(s1); System.out.println(s1); StringBuffer s2 = new StringBuffer(); s2.append("kkk"); System.out.println(s2); change(s2); System.out.println(s2); } public static void change(StringBuffer s) { s.append("zzz"); } public static void change(String s) { s += "bbb"; } } 以下代码结果为 aaa aaa kkk kkkzzz
查看完整描述

4 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

String是不可变的。

String str1 = "abc";
str1 + "zzz";  //这个操作将产生一个新的字符串,相当与 String str2 = str1 + "zzz";

StringBuffer sb = new StringBuffer("abc");
sb.append("zzz"); // 会改变里面的值并返回自己,但不会产生一个新的StringBuffer

(由于StringBuffer为了多线程安全的,每个方法都加锁了(synchronized),所以效率比较低,一般都用StringBuidler。另外,如果刚开始学习Java,建议你把《Java程序设计语言(第4版)》多看几遍,这样比上网学习效率更高,基础更扎实)

查看完整回答
反对 回复 2019-03-01
?
大话西游666

TA贡献1817条经验 获得超14个赞

s += "bbb"改变方法参数了,对方法外是不起作用的。

查看完整回答
反对 回复 2019-03-01
?
GCT1015

TA贡献1827条经验 获得超4个赞

查看完整回答
反对 回复 2019-03-01
  • 4 回答
  • 0 关注
  • 556 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信