String:字符串,使用一对""
引起来表示。
String声明为final
的,不可被继承
String实现了Serializable
接口:表示字符串是支持序列化的。
实现了Comparable
接口:表示String可以比较大小
String内部定义了final char[] value
用于存储字符串数据
通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
字符串常量池中是不会存储相同内容(使用String类的equals()
比较,返回true)的字符串的。
int length()
:返回字符串字符长度return value.length
char charAt(int index)
:返回索引处字符return value[index]
boolean isEmpty()
:判断是否为空字符串return value.length == 0
String toLowerCase()
:使用默认语言环境,将String中所有字符转小写String toUpperCase()
:使用默认语言环境,将String中所有字符转大写String trim()
:清空字符串前后,Unicode编码小于等于\u0020
的字符并返回,例如回车、换行、制表、空格等boolean equals(Object obj)
:比较两个字符串内容是否相同boolean equalsIgnoreCase(String str)
:忽略大小写比较两个字符串是否相等String concat(String str)
:连接字符串,等价于+
int compareTo(String str)
:比较字符串大小String substring(int begin)
:从begin处开始截取到最后一个字符,并返回String substring(int begin,int end)
:从begin处开始截取到end(不包含),并返回boolean endsWith(String suffix)
:判断字符串是否以suffix结束boolean startsWith(String prefix)
:判断字符串是否以prefix开始boolean startsWith(String prefix, int toffset)
:判断字符串从toffset开始是否以prefix开始boolean contains(CharSequence s)
:判断字符串是否包含指定char值序列int indexOf(String str)
:返回str第一次出现在字符串的开始位置索引,不存在返回-1
int indexOf(String str, int fromIndex)
:从fromIndex开始搜索str,并返回第一次出现的开始位置索引,不存在返回-1
int lastIndexOf(Str)
:反向搜索,返回str第一次出现在字符串的开始位置索引,不存在返回-1
int lastIndexOf(String str, int fromIndex)
:从fromIndex开始反向搜索str,并返回第一次出现的开始位置索引,不存在返回-1
String replace(char oldChar,char newChar)
:批量替换字符串中所有的字符oldChar为newChar,并返回新字符串String replace(CharSequence oldChar,CharSequence newChar)
:批量替换字符串中所有的字符序列oldChar为newChar,并返回新字符串String replaceAll(String regex,String newStr)
:批量替换字符串中所有匹配正则表达式regex的字符串为newStr,并返回新字符串String replaceFirst(String regex,String newStr)
:替换字符串中第一个匹配正则表达式regex的字符串为newStr,并返回新字符串boolean matches(String regex)
:返回字符串是否匹配正则表达式regexString[] split(String regex)
:按照给定正则表达式匹配拆分字符串String[] split(String regex, int limit)
:按照给定正则表达式匹配拆分字符串,如果拆分大于limit,剩下的就全放到最后一个字符串一、通过字面量定义的方式=
赋值
String s1 = "abc";
String s2 = "abc";
System.out.println(s1 == s2);
输出
true
=
赋值,会将"abc"
存入字符串常量池中,由于字符串常量池内不会存放重复的字符串,在常量池中指向同一个"abc"
对象,所以s1
和s2
的地址信息一样。
二、通过new + 构造器
的方式
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2);
输出
false
此类赋值方法,s1和s2指向堆空间中的不同的String类型的对象,而这两个不同的String类型对象的char[]
,指向常量池中的同一个“abc”
对象,所以,s1和s2的地址信息不一样。
String s = new String("abc");
方式创建对象,在内存中创建了几个空间?
char[]
,另一个是char[]
对应的常量池中的数据:"abc"
两个字符串类型对象连接,如果在编译期,可以就确定值的情况下,那么连接的结果会放入字符串常量池;只要有一个是变量,连接的结果不会进入字符串常量池。
char[]
存储char[]
存储char[]
存储从高到低排列:StringBuilder > StringBuffer > String
append(xxx)
delete(int start,int end)
setCharAt(int n,char ch) / replace(int start,int end,String str)
charAt(int n )
insert(int offset , xxx)
length()
capacity()
for() + charAt() / toString()