String的本质是char数组
private final char value[];
默认数组长度是0
StringBuilder
线程不安全
本质是char数组
char[]value
默认数组长度是16
增长时int newCapacity =value.length * 2 + 2;
StringBuffer
线程安全
char[]value
默认数组长度是16
增长时int newCapacity = value.length * 2 + 2;
String占用字节数
Char c = “我”;//占用2个byte字节
String str = “我”;
byte [] bytes = str.getByte();
byte长度是3而不是2
因为str.getBytes(encoding)是获取指定编码的byte数组,通常GBK是2个字节,utf-8是3个字节。如果不指定,则去默认的encoding。
关于分隔
StringTokenizer(字符串分隔解析器,默认分隔符:空格、回车、Tab)
Token被分隔字符串中的一块,两端有分隔符
对象个数
String在方法区中有一个字符串池(常量)。每次都会在池中搜寻一次。
Stringa = “abc”; 如果池中有,则直接用池中的,如果没有在池中新建一个
所以String a = new String(“abc”);会建立两个对象。