84669 personnes étudient
152542 personnes étudient
20005 personnes étudient
5487 personnes étudient
7821 personnes étudient
359900 personnes étudient
3350 personnes étudient
180660 personnes étudient
48569 personnes étudient
18603 personnes étudient
40936 personnes étudient
1549 personnes étudient
1183 personnes étudient
32909 personnes étudient
这2种定义方式 有不同吗??第一种会慢吗?
认证高级PHP讲师
答案:一样快
String 的初始化操作: String s= "a"+"b"; String s1= "ab"; 这样子编译器是默认相同的。所以不会慢 再如: String a= "a"; String b = "b"; String s2= a+b; 这样子的出来的 s2 就非常慢,因为内存申请了3次。
String 的初始化操作:
String s= "a"+"b"; String s1= "ab";
这样子编译器是默认相同的。所以不会慢
再如:
String a= "a"; String b = "b"; String s2= a+b;
这样子的出来的 s2 就非常慢,因为内存申请了3次。
望采纳,如果满意快给我积分。。我是新加入的成员,希望能为大家服务!!!(真想给第一个回答来个-1分,瞎几把回答)
第一种那不止是慢的问题,而是一段像屎的一样代码。
new StringBuilder("a").append("b").append("c");
new StringBuilder("a" + "b" + "c");
如果你像上面这种用,那还不如直接使用"a" + "b" + "c"因为没有使用到StringBuilder的任何特性,加上JDK的编译优化最终代码会变成如下。
"a" + "b" + "c"
StringBuilder
JDK
new StringBuilder(new StringBuilder("a").append("b").append("c").toString());
第二种完全没看懂啊。使用StringBuilder的意义是什么?本身不就是一个字符串了吗?
javap -c看看,编译器应该会把你用+连接起来的字符串常量拼接到一起,两种写法运行起来应该是一样的。
javap -c
+
常量直接 +变量也可以 +很在乎性能的话看这个:http://calvin1978.blogcn.com/...
只要不是对象之间使用拼接符‘+’,字符串之间使用拼接符‘+’和不使用基本上都没有什么差别; 而string对象一旦产生后,被修就会再产生一个对象 所有string对象之间拼接会很慢;
public static void main(String[] args) {
fun1(10000000);
}private static void fun1(int length){
long min1 = new Date().getTime(); System.out.println(min1); //1 for(int i=0;i
}private static void fun2(int length){
long min1 = new Date().getTime(); System.out.println(min1); //2 for(int i=0;i
}private static void fun3(int length){
long min1 = new Date().getTime(); System.out.println(min1); //3 for(int i=0;i
}private static void fun4(int length){
}
通过这两种创建对象的方式比较快慢,实际上可以转化为下面两种方式比较快慢:
String a = "Test"; String b = "T" + "e" + "s" + "t";
这两种方式当然是一样快的啦,在JVM中其实就是把"T" + "e" + "s" + "t"当做"Test"进行处理。我们现在来看一下下面这种字符串拼接的方式:
String a = "Te"; String b = a + "st";
上面这种方式是字符串拼接效率最低的方式,是极为不推荐的,因为这种字符串拼接的时候,JVM其实就是生成一个新的StringBuilder,然后调用append方法,然后再进行toString,速度简直是慢成狗(狗:我又躺枪。。。)所以综上所述:题主所写的这两种new StringBuilder的方式其实就是同一种方式,效率是一样的,童叟无欺。
答案:一样快
望采纳,如果满意快给我积分。。我是新加入的成员,希望能为大家服务!!!(真想给第一个回答来个-1分,瞎几把回答)
第一种那不止是慢的问题,而是一段像屎的一样代码。
如果你像上面这种用,那还不如直接使用
"a" + "b" + "c"
因为没有使用到StringBuilder
的任何特性,加上JDK
的编译优化最终代码会变成如下。第二种完全没看懂啊。使用
StringBuilder
的意义是什么?本身不就是一个字符串了吗?javap -c
看看,编译器应该会把你用+
连接起来的字符串常量拼接到一起,两种写法运行起来应该是一样的。常量直接 +
变量也可以 +
很在乎性能的话看这个:http://calvin1978.blogcn.com/...
只要不是对象之间使用拼接符‘+’,字符串之间使用拼接符‘+’和不使用基本上都没有什么差别; 而string对象一旦产生后,被修就会再产生一个对象 所有string对象之间拼接会很慢;
public static void main(String[] args) {
}
private static void fun1(int length){
}
private static void fun2(int length){
}
private static void fun3(int length){
}
private static void fun4(int length){
}
通过这两种创建对象的方式比较快慢,实际上可以转化为下面两种方式比较快慢:
这两种方式当然是一样快的啦,在JVM中其实就是把"T" + "e" + "s" + "t"当做"Test"进行处理。
我们现在来看一下下面这种字符串拼接的方式:
上面这种方式是字符串拼接效率最低的方式,是极为不推荐的,因为这种字符串拼接的时候,JVM其实就是生成一个新的StringBuilder,然后调用append方法,然后再进行toString,速度简直是慢成狗(狗:我又躺枪。。。)
所以综上所述:题主所写的这两种new StringBuilder的方式其实就是同一种方式,效率是一样的,童叟无欺。