黑马程序员技术交流社区

标题: 字符串相加用“+”和append()的区别? [打印本页]

作者: 胡滨    时间: 2013-4-9 21:24
标题: 字符串相加用“+”和append()的区别?
本帖最后由 胡滨 于 2013-4-9 21:55 编辑

不都是加字符串吗?
既然有这两种方法,应该有差别吧?
求解释。
作者: 刘林虎    时间: 2013-4-9 21:31
java中没有运算符重载,你说的string+string,是java内置将String类特殊处理为和基本类型Integer,Double等相同的类型,字符串相加实际是调用方法append方法。
比如:
String x = "a1" + "a2"
其实在编译后,代码变为
String x = (new StringBuilder(String.valueOf("a1"))).append("a2").toString();
这就是为什么在操作String时建议采用StringBuffer了,上面的操作显然对多次String的相加不利。
作者: 续圆凯    时间: 2013-4-9 21:31
本帖最后由 续圆凯 于 2013-4-9 21:42 编辑

1.  用“+“号每加一次创建一个对象,
举个例子来说明他们的区别:string   a= "aa ";  //假如第一次a分配了2Bit空间
a+= "bb ";      
假如第一次a分配了2Bit空间(假如),下面相加的话,假如 "bb "需要2bit空间,则会开辟一个4bit的空间把aabb放进去.而存入 "aa "的空间会在下一次垃圾回收的时候删除.

2.append( ),是在原有基础上再分配空间,所以如果字符串相加的话,用StringBuilder吧.

append()只是将字符串追加到原字符串的尾部,始终都是一个对象!高效,正规.


作者: U芽Lady    时间: 2013-4-9 21:35
用"+"号每加一次创建一个对象,比如字符串常量池中原来有有一个"abc"字符串,加上字符串"de"后,字符串常量池中就会有两个字符串"abc"和"abcde"
Append()知识将字符串追加到原来字符的尾部,始终是一个对象
作者: 王军行    时间: 2013-4-9 21:42
“+”作为字符串连接符存在是底层调用的就是append方法。
但是如果对String进行多次操作,复杂的操作,简单+实在没办法实现
所以要用 StringBuilder 和append等方法
可以理解为“+”作为字符串连接的简写形式,
简化代码,简单使用时非常方便
但是应用有局限性,功能有限。
作者: 胡滨    时间: 2013-4-9 21:56
感谢所有帮助的朋友:handshake




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2