- 使用
intern()
方法利用字符串常量池:
intern()
方法会检查字符串常量池中是否存在当前字符串,如果存在则返回常量池中的字符串引用,否则将当前字符串添加到常量池中并返回其引用。
- 示例代码:
public class StringOptimization {
public static void main(String[] args) {
String str1 = "hello";// 直接使用字符串字面量,会放入字符串常量池
String str2 = new String("hello");// 通过new创建,在堆中创建新对象
String str3 = str2.intern();// 将str2的内容放入常量池并获取引用
System.out.println(str1 == str2);// false,str1指向常量池,str2指向堆
System.out.println(str1 == str3);// true,str1和str3都指向常量池中的"hello"
}
}
- 使用
StringBuilder
或StringBuffer
进行字符串拼接:
- 当需要进行多次字符串拼接操作时,使用
StringBuilder
(非线程安全,性能略高)或StringBuffer
(线程安全)可以避免每次拼接都创建新的字符串对象。
- 示例代码:
public class StringBuilderExample {
public static void main(String[] args) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; i++) {
sb.append(i);
}
String result = sb.toString();
System.out.println(result);
}
}
- 缓存经常使用的字符串:
- 如果某些字符串会被频繁使用,可以将其定义为类的静态常量,这样只会在类加载时创建一次对象。
- 示例代码:
public class StringCaching {
private static final String COMMON_STRING = "common value";
public void someMethod() {
// 这里可以多次使用COMMON_STRING,而不会重复创建对象
String str = COMMON_STRING + " appended";
System.out.println(str);
}
}