黑马程序员技术交流社区

标题: 大神们看看这三种方法哪个更具效率,说说原理! [打印本页]

作者: 邹学良    时间: 2013-3-9 20:14
标题: 大神们看看这三种方法哪个更具效率,说说原理!
  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");
复制代码

作者: 熊冠银    时间: 2013-3-9 20:53
我觉得a2调用了3个append方法,所以效率最差。
作者: 杨剑    时间: 2013-3-9 21:05
我觉得String a = "a" + "b" + "c" 这种方式效率最高,因为他创建的对象是在字符串常量池中进行的,不需要在堆内存中开辟空间,StringBuffer a1=newStringBuffer("a"+"b"+"c")这种方式,不仅仅是在常量池中创建一个abc对象,而且还要在堆内存中创建对象,最慢
下面那种方式效率其次,因为只创建了一个缓冲对象,然后进行逐个添加,逐个添加并不创建新的对象,不需要开辟空间。不过这个只是表面上看,如果了解StringBuffer底层,可能不是这样。
作者: 移动小坦克    时间: 2013-3-9 23:52
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";
其中第一行是在对内存开辟新的空间,并把地址赋值给引用
但是第二个,由于常量池中已经有了相同的对象
所以是不会再建立新的对象的,只是指向了原来的相同对象。
所以,考虑到将来的话,第一个效率最高。
作者: amen0205    时间: 2013-3-10 05:44


看看他们都干了什么  就知道谁效率高了
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");




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