String连接字符串操作运行时间
public static void main(String[] args) {
// TODO Auto-generated method stubdouble startTime=System.nanoTime();
String a="b";
System.out.println(a+"c");
double endTime=System.nanoTime();
System.out.println(endTime-startTime);
//
}
//运行176285.0微妙
StringBuffer连接字符串
public static void main(String[] args) {
// TODO Auto-generated method stub
double startTime=System.nanoTime();
StringBuffer a=new StringBuffer("b");
System.out.println(a.append("c"));
double endTime=System.nanoTime();
System.out.println(endTime-startTime);
//179161.0---StringBuffer()
}
运行时间172587.0微妙
StringBuffer是对字符串的一次复制,而,String需要找到该对象然后进行复制,时间差就出来了
如果有大量的字符串需要连接时StringBuffer效率要比String效率高
再看看其他方面
字符串匹配
public static void main(String[] args) {
double startTime=System.nanoTime();
String a="qwwewewewe";
for(int i=0;i<a.length();i++)
{
if(a.charAt(i)=='e')
{
System.out.println(a.charAt(i));
}
}
double endTime=System.nanoTime();
System.out.println(endTime-startTime);
}
运行时间:225184.0
public static void main(String[] args) {
double startTime=System.nanoTime();
//String a="qwwewewewe";
StringBuffer a=new StringBuffer("qwwewewewe");
for(int i=0;i<a.length();i++)
{
if(a.charAt(i)=='e')
{
System.out.println(a.charAt(i));
}
}
double endTime=System.nanoTime();
System.out.println(endTime-startTime);
}
运行时间:256003.0
可见String运行效率又高于StringBuffer
这是什么原因呢
原因如下
String 字符串存取是静态的
不需要指向
而StringBuffer需要考虑内存的分配问题,内存的拓展和指向需要耗时,java内部处理问题
所以存储值用String而不用StringBuffer
所以考虑String和StringBuffer效率问题应该具体问题具体分析