String类代表字符串。Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。
字符串不变;它们的值在创建后不能被更改。字符串缓冲区支持可变字符串。因为String对象是不可变的,它们可以被共享。
一、创建
1.显式创建,String str=new String("aaa"),每次创建都会在堆中创建一个新对象
2.隐式创建:String str="aaa",先在栈中创建字符串对象的引用变量,在创建字符串对象之前,先在字符串常量池中匹配,若有对应的,直接引用,否则在常量池中添加新内容再引用。
二、相等比较
1.equals():比较字符串内容是否相等
2.equalsIgnoreCase():忽略字母大小写来比较字符串内容是否相等
三、不可变性
在修改字符串内容时,会重新创建一个字符串对象,通过查找String类的源代码可以得知,String类型本身是由一个叫做value[ ]的字符数组,存在String类中,而且由final修饰并且封装,不可变,而且也没有相关的getter和setter方法。
String源码:

四、String的构造方法
.getBytes()将字符串转为byte数组
.toCharArray()将字符串转为char数组

五、String的判断功能
boolean equals(Object obj) 重写Obejct类中的方法,判断内容是否相等
boolean equalsIgnoreCase(String str) 不区分大小写 验证码
boolean contains(String str) 是否包含某个指定子串
boolean isEmpty() 判断是否为空 ""
boolean startsWith(String prefix) 判断是否以指定的子串开头
boolean endsWith(String suffix)判断是否以指定的子串结尾
boolean compareTo(String anotherString) 两个字符串之间按照编码大小比较

结果:

六、String的获取功能
int length() 获取长度
char charAt(int index) 获取指定位置的字符
int indexOf(String str) 获取指定字符首次出现的位置
int indexOf(String str,int fromIndex) 从指定的位置开始查找字符首次出现的位置
String substring(int startIndex) 截取字符串,从指定的位置开始,截取到最后一位
String substring(int startIndex,int endndex) 截取字符串,从指定的位置开始,到指定位置(endndex-1)结束


七、String的转换功能
byte[] getBytes() 将字符串转为byte数组
char[] toCharArray() 将字符串转为char数组
static String valueOf(char[] chs) 将char数组转为字符串
String toLowerCase() 英文字母转小写
String toUpperCase() 英文字母转大写
String concat(String str) 连接另一个字符串,返回一个新的字符串
Stirng[] split(分割符); 按照指定的规则,将字符串拆分为数组


八、String的替换功能
String replace(char old,char new)
String replace(String old,String new) 用新的字符串替换指定的所有的子串
replaceAll(String regex, String replacement)用新的字符串替换指定的所有的子串,使用正则表达式匹配
replaceFirt(String sregex, String replacement) 用新的字符串替换指定的第一个出现的子串,使用正则表达式匹配
String trim() 去除字符串两端空格,中间空格不能去除的


九、正则表达式



十、StringBuffer和StringBuilder类
StringBuffer 是线程安全的 这个类中的方法上加了一个synchronized(同步锁)关键字,
StringBuilder 类中的方法没有加synchronized关键字,是多线程不安全的
两者不同点: StringBuffer是线程安全的
StringBuilder是线程不安全的(适合单线程情况)
两者相同点: 都是可变的字符串对象,底层都有一个char数组char[] value; 创建之初,会创建一个指定容量的数组,增删改查都是在此数组上操作.数组如果空间不够,会新创建一个数组,Arrays.copyOf();最终实现,调用的都是AbstractStringBuilder父类中方法实现.
方法:(两者方法相同)
构造方法
public StringBuffer()
public StringBuffer(String str)
添加功能
StringBuffer append(String str)
StringBuffer insert(int offset,String str)
删除功能
StringBuffer deleteCharAt(int index)
StringBuffer delete(int start,int end)
替换功能
StringBuffer replace(int start,int end,String str)
反转功能
StringBuffer reverse()
截取功能
String substring(int start)
String substring(int start,int end)


十一、String,StringBuffer 和 StringBuilder区别
String值不可改变,适用于少量拼接的
StringBuffer可变 多线程安全的 适用于大量拼接
StringBuilder可变 多线程不安全的 适用于大量拼接