A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡滨 中级黑马   /  2013-4-9 21:24  /  2506 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡滨 于 2013-4-9 21:55 编辑

不都是加字符串吗?
既然有这两种方法,应该有差别吧?
求解释。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

5 个回复

倒序浏览
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的相加不利。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 续圆凯 于 2013-4-9 21:42 编辑

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

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

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

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
用"+"号每加一次创建一个对象,比如字符串常量池中原来有有一个"abc"字符串,加上字符串"de"后,字符串常量池中就会有两个字符串"abc"和"abcde"
Append()知识将字符串追加到原来字符的尾部,始终是一个对象

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
“+”作为字符串连接符存在是底层调用的就是append方法。
但是如果对String进行多次操作,复杂的操作,简单+实在没办法实现
所以要用 StringBuilder 和append等方法
可以理解为“+”作为字符串连接的简写形式,
简化代码,简单使用时非常方便
但是应用有局限性,功能有限。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
感谢所有帮助的朋友:handshake
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马