string str1="1"+"2"+"3"+....+"1000"; 1式
string str2;
for(int i = 1; i <=1000 ;i++)
str2+=i; 2式
stringbuffer str3 = new stringbuffer();
for(int i = 1; i <=1000 ;i++)
str3 = str3.append(i); 3式
1式和2式那个执行速度快?
2式和3式那个执行速度快?
为什么?请大虾们指点一下!
string str2;
for(int i = 1; i <=1000 ;i++)
str2+=i; 2式
stringbuffer str3 = new stringbuffer();
for(int i = 1; i <=1000 ;i++)
str3 = str3.append(i); 3式
1式和2式那个执行速度快?
2式和3式那个执行速度快?
为什么?请大虾们指点一下!
这个最快,因为"1"+"2"+"3"+....+"1000"这些链接是在编译时就完成的,不占用运行时间。string str2;
for(int i = 1; i <=1000 ;i++)
str2+=i; 2式
这个最慢,因为每次循环都要生成一个StringBuilder对象,连接,然后再转为String。stringbuffer str3 = new stringbuffer();
for(int i = 1; i <=1000 ;i++)
str3 = str3.append(i); 3式 这个只创建一个StringBuffer对象,中间存在若干次数组的重新分配。
3比2快
1比2快
1快因为在编译的时候编译器就把当做一个String放到一起了
2最慢因为每次都会生成一个新的String
String是immutable的
1没有循环,在编译的时候进行了优化..
2需要循环每次都要创建String对象.
3只有一个StringBuffer对象对它进行操作.
这个, 1 在编译是优化有一个对象, 是最快的, 运行不需要生成对象,
2在运行期生成了很多对象 原因用了+操作。 这个是JAVA的重载了的运算符。
3 stringbuffer 是为了解决2的效率问题 的,
String str1="";
String str2="";
StringBuffer str3= new StringBuffer();
long startTime = System.currentTimeMillis();
for( int t=0; t<num; t++)
{
str1="1"+"2"+"3"+"4"+"5"+"6"+"7"+"8"+"9"+"10";
}
long to = System.currentTimeMillis() - startTime;
System.out.println(" T0= "+to );
startTime = System.currentTimeMillis();
for( int t=0; t<num; t++)
{
for(int i = 1; i <=10 ;i++)
str3 = str3.append(i);
}
long t2 = System.currentTimeMillis() - startTime;
System.out.println(" T2= "+t2 );
// startTime = System.currentTimeMillis();
// for( int t=0; t<num; t++)
// {
// for(int i = 1; i <=10 ;i++)
// str2 += i;
// }
// long t1 = System.currentTimeMillis() - startTime;
// System.out.println(" T1= "+t1 );
TO = 16;
T2 = 203;
T1 无法完成计算 需要时间太长 我没耐心等待了!
大家都说对了!
1>3>22 是最不可取的 因为 他 需要
1+2 的时候生成 12
+3 的时候 生成 123
等等
每个循环都要生成 "i" 和结果 2个字符串测试结果 已经给出
如果 输入比较麻烦 就采用 第3种方式 他和第一种方式 相差不错
总比用一天时间来输入 1+2+...+1000的好! 程序运行也的考虑 人工费用 和阅读代码的难以啊!