1. 一个字符占两个字节,不管是英文还是中文
2. 字符串本质是由字符数组存储的一组数据 private final char value[];
3. 通过双引号创建的字符串对象,其引用直接指向底层常量池中的地址,如果常量池没有则创建
4. 通过构造函数new创建的字符串对象,会先在堆中创建一个空间,其引用指向堆空间的对象地址,而该对象中有一个value[]属性,该属性的引用才会指向底层常量池中的地址,如果常量池没有则创建
5. 两个双引号的String对象相加的情况(例如 String str = "abc" + "def"; ),编译器会优化为一个字符串(即 String str = "abcdef"; ),所以两个双引号相加的情况只会在方法区创建一个对象
6. 当出现两个字符串常量相加的情况,会先创建一个容量为16的空的StringBuild对象,然后调用它的append方法依次传入第一个和第二个字符串,然后再调用String构造器把StringBuild变成一个全新的String字符串,所以两个字符串常量相加的情况会创建3个对象,分别是:StringBuild对象、在堆空间里的String对象和该对象value[]属性指向方法区的"abcdef"对象
7. 因为String类底层保存的是字符串常量,每次更新字符串都需要new StringBuild和new String开辟空间,所以大批量String字符串的拼接效率比较低,但用String做配置文件或表示常量的值还是很方便的
1. public boolean equals(Object anObject)
区分大小写,如果是同一个对象,或者value[]内容相同,返回true,否则返回false
2. public boolean equalsIgnoreCase(String anotherString)
不区分大小写,其余和equals方法相同
3. public int indexOf(String str, int fromIndex)
返回指定子串的第一次出现的str字符串中的索引,从索引fromIndex开始,找不到返回-1
4. public int lastIndexOf(String str, int fromIndex)
返回指定子字符串的最后一次出现的str字符串中的索引,到索引fromIndex为止,找不到返回-1
5. public String substring(int beginIndex)
返回指定索引beginIndex开始到结束的字符串
6. public String substring(int beginIndex, int endIndex)
返回指定索引beginIndex开始到endIndex - 1的字符串,左开右闭
7. public String toUpperCase()
将字符串转换为大写返回
8. public String toLowerCase()
将字符串转换为小写返回
9. public String concat(String str)
将字符串拼接在末尾后返回
10. public String replace(CharSequence target, CharSequence replacement)
将老字符串替换为新字符串后返回,但对源字符串对象不产生影响
11. public String[] split(String regex)
将字符串分割并返回
12. public char[] toCharArray()
将字符串转换为字符数组
13. public int compareTo(String anotherString)
比较两个字符串,字符串相同返回值为0,前面部分相同返回字符串长度的差值,前面部分不同返回unicode的差值
14. public static String format(String format, Object... args)
占位符:%s是String,%d是int,%.2是double(四舍五入精确到小数点后两位),%c是char