1、String是唯一一个可以直接用常量赋值的引用数据类型。
String的常量也是一个对象。
数据段——字符串常量池。
2、每一个字符串常量对象在加载期放入字符串常量池。
java对String常量会在加载期预加载,产生到数据段的字符串常量池中。
运行的时候,如果要用到某个String常量,只需要直接从常量池中取出即可。
3、String拥有一个特殊点叫:String对象内容不可变。
这导致String在做字符串拼接的时候,会有比较大的内存消耗,而StringBuilder和StringBuffer就是用来解决String内容不可变这个问题的。
4、在java中专门重载了“+”号运算符,用来实现字符串的拼接。
在java中也针对String设计了大量的操作方法:
1、String跟数组相关的方法:length(),charAt(),indexOf(),lastIndexOf(),toCharArray()
2、String跟字母有关的方法:toUpperCase(),equalsIgnoreCase()不区分大小写比较两字符串,compareTo()字典顺序比较
3、与内容操作相关:replace(),endWith(),subString()截取字符串,concat()字符串拼接,contains()判断子串
4、最重要的三个方法:
4-1、trim()——去掉字符串前后的空格,(接收字符串输入的时候默认调用的方法)养成习惯。
4-2、split()——做字符串拆分,根据指定的分隔符(传输内容的时候,按一定格式传输和拆分)。
4-3、matchs()——正则表达式效验。
正则表达式:字符串内容的匹配模板。
正则表达式本身就是一个字符串。
符号:
1、[]代表一个字符,里面的内容代表有哪些选择。
2、{}代表前面的正则式出现的次数。
{m,n}最少出现m次,最多出现n次 {m,}最少出现m次 {m}只能出现m次
3、()代表分组可选(_|_|_|...)
StringBuffer/StringBuilder
1、它们是全新的类型,与String没有继承关系。
2、它们不享受String的特殊语法。
3、它们是为了解决String的内容不可变问题出现的,它们是可变的。
4、它们的方法没有String丰富,大部分方法用于做字符串的拼接或删除,用的时候多半需要下标。
区别:
StringBuffer先与StringBuilder产生。
StringBuffer是线程安全的。
StringBuilder是非线程安全的,单线程的情况下尽量用它。
同样的情况下,凡是线程安全的,性能都低一些,凡是线程不安全的,性能都高一些。