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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. String a= "a" + "b" + "c";
  2. StringBuffer a1 = new StringBuffer("a" + "b" + "c");
  3. StringBuffer a2= new StringBuffer();
  4. a2.append("a");
  5. a2.append("b");
  6. a2.append("c");
复制代码

点评

其实你可以多看看java是怎么实现StringBuilder的,看完了你就明白了  发表于 2013-3-10 09:07

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
我觉得a2调用了3个append方法,所以效率最差。
回复 使用道具 举报
我觉得String a = "a" + "b" + "c" 这种方式效率最高,因为他创建的对象是在字符串常量池中进行的,不需要在堆内存中开辟空间,StringBuffer a1=newStringBuffer("a"+"b"+"c")这种方式,不仅仅是在常量池中创建一个abc对象,而且还要在堆内存中创建对象,最慢
下面那种方式效率其次,因为只创建了一个缓冲对象,然后进行逐个添加,逐个添加并不创建新的对象,不需要开辟空间。不过这个只是表面上看,如果了解StringBuffer底层,可能不是这样。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
String a= "a" + "b" + "c";
StringBuffer a1 = new StringBuffer("a" + "b" + "c");
这两种效率相同,都是在创建对象,开辟空间,第三种调用了三次append方法,效率最低。
但是前两种,还有区别就是
如果将来又写了如下代码
StringBuffer a2 = new StringBuffer("a" + "b" + "c");
String a3= "a" + "b" + "c";
其中第一行是在对内存开辟新的空间,并把地址赋值给引用
但是第二个,由于常量池中已经有了相同的对象
所以是不会再建立新的对象的,只是指向了原来的相同对象。
所以,考虑到将来的话,第一个效率最高。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报


看看他们都干了什么  就知道谁效率高了
String a= "a" + "b" + "c";       效率最高  共创建4个字符串对象  都在字符串池中
StringBuffer a1 = new StringBuffer("a" + "b" + "c");        效率其次  不仅创建了4 个字符串对象  还再堆中开辟了空间  创建了StringBuffer对象
StringBuffer a2= new StringBuffer();   效率最低   创建了4个字符串对象   一个StringBuffer对象  还调用了三次 append方法  
a2.append("a");
a2.append("b");
a2.append("c");

评分

参与人数 1黑马币 +15 收起 理由
黄玉昆 + 15 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马