概述:
String是不可变的对象,
因此在每次对String 类型进行改变的时候,
都会生成一个新的 String 对象,
然后将指针指向新的 String 对象,
所以经常改变内容的字符串最好不要用 String ,
因为每次生成对象都会对系统性能产生影响,
特别当内存中无引用对象多了以后,
JVM 的 GC 就会开始工作,性能就会降低。
使用策略:
1) 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,
用StringBuilder ;多线程操作大量数据,用StringBuffer。
2) 不要使用String类的”+”来进行频繁的拼接,因为那样的性能极差的,
应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:
//String
String result = "";
for (String s : hugeArray) {
result = result + s;
}
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
sb.append(s);
}
//StringBuffer
String result = sb.toString();
因此在每次对String 类型进行改变的时候,
都会生成一个新的 String 对象,
然后将指针指向新的 String 对象,
所以经常改变内容的字符串最好不要用 String ,
因为每次生成对象都会对系统性能产生影响,
特别当内存中无引用对象多了以后,
JVM 的 GC 就会开始工作,性能就会降低。
使用策略:
1) 基本原则:如果要操作少量的数据,用String ;单线程操作大量数据,
用StringBuilder ;多线程操作大量数据,用StringBuffer。
2) 不要使用String类的”+”来进行频繁的拼接,因为那样的性能极差的,
应该使用StringBuffer或StringBuilder类,这在Java的优化上是一条比较重要的原则。例如:
//String
String result = "";
for (String s : hugeArray) {
result = result + s;
}
// 使用StringBuilder
StringBuilder sb = new StringBuilder();
for (String s : hugeArray) {
sb.append(s);
}
//StringBuffer
String result = sb.toString();