第五条 避免创建不必要的对象
(1)
二者比较当然是第二种更好,因为第一种比第二种多了一个new了个String。
多new一个String小规模看没什么,所以自己试着写了点代码,扩大这个规模,代码如下:
我的机子分别是47 0差别果然很大。。。
所以Sun推荐用StringBuilder或者StringBuffer
.String, StringBuffer StringBuilder的区别。(Core Java)
答:String的长度是不可变的;
StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要 String,那么使用StringBuffer的toString()方法;线程安全;
StringBuilder是从 JDK 5
开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是好像我写代码时,调不调toString方法都一样。
(2)
[color=red]注意不要写这种代码[/color]
[i]其中有装箱和拆箱主意代码Long和long的区别就行[/i]
[size=large][color=red]总之(1)注意选择好String,把String安排到好的位置
(2)在多次循环中小心java的自动装箱拆箱功能,它也会浪费大量的资源。
(3)如果有些变量是不变的话,那就没必要每次都实例化它,只要一个就够了,可以用singleton,枚举或者其他合适的方法[/color][/size]
(1)
String s = new String("S");
String s1 = "s";
二者比较当然是第二种更好,因为第一种比第二种多了一个new了个String。
多new一个String小规模看没什么,所以自己试着写了点代码,扩大这个规模,代码如下:
long l1 = new Date().getTime();
for(int i = 0; i<1000000; i++) {
String s = new String("S");
}
long l2 = new Date().getTime();
System.out.println(l2 - l1);
long l3 = new Date().getTime();
String s1;
for(int i = 0; i<1000000; i++) {
s1 = "S";
}
long l4 = new Date().getTime();
System.out.println(l4 - l3);
我的机子分别是47 0差别果然很大。。。
所以Sun推荐用StringBuilder或者StringBuffer
package com.util;
public class Test {
public static void main(String[] args) {
StringBuilder sd = new StringBuilder();
sd.append("H").append("ello");
String s = "World";
sd.append(s);
System.out.println(sd);
StringBuffer sb = new StringBuffer();
sb.append("H").append("ello");
String s1 = "World";
sb.append(s1).toString();
System.out.println(sd);
}
}
.String, StringBuffer StringBuilder的区别。(Core Java)
答:String的长度是不可变的;
StringBuffer的长度是可变的,如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要 String,那么使用StringBuffer的toString()方法;线程安全;
StringBuilder是从 JDK 5
开始,为StringBuffer该类补充了一个单个线程使用的等价类;通常应该优先使用 StringBuilder
类,因为它支持所有相同的操作,但由于它不执行同步,所以速度更快。
但是好像我写代码时,调不调toString方法都一样。
(2)
[color=red]注意不要写这种代码[/color]
package com.util;
public class Test {
public static void main(String[] args) {
Long sum = 0L;
for(long i = 0; i<Integer.MAX_VALUE; i++) {
sum +=i;
}
}
}
[i]其中有装箱和拆箱主意代码Long和long的区别就行[/i]
[size=large][color=red]总之(1)注意选择好String,把String安排到好的位置
(2)在多次循环中小心java的自动装箱拆箱功能,它也会浪费大量的资源。
(3)如果有些变量是不变的话,那就没必要每次都实例化它,只要一个就够了,可以用singleton,枚举或者其他合适的方法[/color][/size]