String 不可变长的字符序列
StringBuffer 可变长的字符序列,同步的|线程安全的
StringBuilder 可变长的字符序列,不同步|线程不安全,相对效率高
执行效率: StringBuilder > StringBuffer > String
String : String类表示字符串。 Java程序中的所有字符串文字(例如"abc" )都实现为此类的实例。
String str = "abc"; 1个对象 "abc"->常量池中,new的对象在堆内存中, "abc"字符串常量->存在与字符串常量池中
String str2 = new String("haha"); 2个 new->堆 "haha"->常量池
String str3 = new String("abc"); 1个 new->堆 "abc"->常量池中已有,在前面红一行时候构建
String s1 = new String()//String() 初始化新创建的 String对象,使其表示空字符序列
String s2 = new String("abc")//String(String original) 初始化新创建的String对象,使其表示与参数相同的字符序列;
String s3 = new String(chars)//String(char[] value) 分配新的 String ,使其表示当前包含在字符数组参数中的字符序列
String s4 = new String(chars,1,3)//String(char[] value, int offset, int count) 分配一个新的 String ,其中包含字符数组参数的子数组中的字符
String str = "中国"//String(byte[] bytes) 通过使用平台的默认字符集解码指定的字节数组构造新的 String 。
byte[] arr = str.getBytes("gbk")//byte[] arr = str.getBytes(); //utf-8->1汉字3个字节 gbk->1汉字2字节
String s7 = new String(arr,0,2,"gbk")//String(byte[] bytes, int offset, int length) 通过使用平台的默认字符集解码指定的字节子阵列来构造新的 String
String底层使用 : private final byte[] value 存储字符串中的字符数据,在jdk11中底层使用byte[],在jdk8之中使用char[]
str1.charAt(3)//char charAt(int index) 返回指定索引处的 char值
str1.codePointAt(3)//int codePointAt(int index) 返回指定索引处的字符(Unicode代码点)
str1.codePointBefore(3)//int codePointBefore(int index) 返回指定索引之前的字符(Unicode代码点)
str1.compareTo(str2)//int compareTo(String anotherString) 按字典顺序比较两个字符串
返回值:
>0 ==> str1>str2
==0 ==> str1==str2
<0 ==> str1<str2
str1.compareToIgnoreCase(str2)//int compareToIgnoreCase(String str) 按字典顺序比较两个字符串,忽略大小写差异
str1.concat(str2)//String concat(String str) 将指定的字符串连接到此字符串的末尾
str1.contains("ABC")//boolean contains(CharSequence s) 当且仅当此字符串包含指定的char值序列时,才返回true
str1.endsWith("abc")//boolean endsWith(String suffix) 测试此字符串是否以指定的后缀结尾
str1.startsWith("abc")//boolean startsWith(String prefix) 测试此字符串是否以指定的前缀开头
//byte[] getBytes() 使用平台的默认字符集将此 String编码为字节序列,将结果存储到新的字节数组中
//byte[] getBytes(String charsetName) 使用命名的字符集将此 String编码为字节序列,将结果存储到新的字节数组中
str1.getChars(6,10,arr,3)//void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中
str1.indexOf("abc")//int indexOf(String str) 返回指定子字符串第一次出现的字符串中的索引
str1.lastIndexOf("abc")//int lastIndexOf(String str) 返回指定子字符串最后一次出现的字符串中的索引
"短道速滑队".length()//int length() 返回此字符串的长度
"嘻哈".repeat(3)//String repeat(int count) 返回一个字符串,其值为此字符串的串联重复 count次
str1.replace("abc","ABC")//String replace(CharSequence target, CharSequence replacement) 将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列
"name=张三".split("=")//String[] split(String regex) 将此字符串拆分为给定 regular expression的匹配 项
" abc ".trim()//String trim() 返回一个字符串,其值为此字符串,删除了所有前导和尾随空格,其中space被定义为其代码点小于或等于 'U+0020' (空格字符)的任何字符
" abc ".strip()//String strip() 返回一个字符串,其值为此字符串,并删除了所有前导和尾随 white space
" abc ".stripLeading()//String stripLeading() 返回一个字符串,其值为此字符串,并删除了所有前导 white space 。
//String stripTrailing() 返回一个字符串,其值为此字符串,并删除所有尾随 white space 。
//“ ”全角空格
//“ ”全角空格
str1.substring(3)//String substring(int beginIndex) 返回一个字符串,该字符串是此字符串的子字符串。
str1.substring(3,6)//String substring(int beginIndex, int endIndex) 返回一个字符串,该字符串是此字符串的子字符串
str1.toCharArray()//char[] toCharArray() 将此字符串转换为新的字符数组
str1.toUpperCase()//String toUpperCase() 使用默认语言环境的规则将此 String所有字符转换为大写
//String toLowerCase() 使用默认语言环境的规则将此 String所有字符转换为小写
String.valueOf(false)//static String valueOf(boolean b) 返回 boolean参数的字符串表示形式
" ".isBlank()//boolean isBlank() 如果字符串为空或仅包含 white space代码点,则返回 true ,否则 false
" ".isEmpty()//boolean isEmpty() 返回 true ,当且仅当, length()是 0
s3.intern()==s5//String intern() 返回字符串对象的规范表示
s3.intern()==s5//jdk1.7之后规则: 先判断字符串常量池中是否存在当前字符串常量,果存在直接返回常量池中对象的引用,如果不存在, 会拷贝一个当前对象的引用(地址)到常量池中,然后返回常量池中的引用
== 比较对象地址;equals 可以实现比较对象内容