黑马程序员技术交流社区
标题:
大神们看看这三种方法哪个更具效率,说说原理!
[打印本页]
作者:
邹学良
时间:
2013-3-9 20:14
标题:
大神们看看这三种方法哪个更具效率,说说原理!
String a= "a" + "b" + "c";
StringBuffer a1 = new StringBuffer("a" + "b" + "c");
StringBuffer a2= new StringBuffer();
a2.append("a");
a2.append("b");
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