String、StringBuffer、StringBuilder
String | 不可变的字符序列,适用于少量字符串操作的情况 |
StringBuffer | 可变的字符序列,线程安全的,适用于多线程下在字符缓冲区进行大量操作的情况;效率低 |
StringBuilder | 可变的字符序列,线程不安全的,适用于单线程下在字符缓冲区进行大量操作的情况;效率高 |
字符串改变的情况下:
运行速度:StringBuilder > StringBuffer > String
原因:String是字符串常量,一旦创建就不能改变,StringBuilder和StringBuffer的对象是变量,是可以改变的
String的使用陷阱:
String s = “a”; //创建了一个字符串
s = s + “b”;
实际上原来字符串a 的对象已经丢弃掉了,现在又产生了一个字符串ab的对象。如果多次执行这些改变字符串内容的操作,会导致大量副本字符串对象存留在内存中,降低效率。
将ISO-8859-1的编码转换成UTF-8:
new String(str.getBytes(), “UTF-8”);
String s = new String(“a”);创建了几个字符串对象:
两个。”a”对应一个对象,这个对象放在字符串常量缓冲区(方法区),常量”a”不管出现多少遍都是缓冲区的那一个。new String 每new一次就创建一个对象(堆)