java.lang.String 类由final关键字修饰,表示该类不能被继承
该类用于描述字符串,使用该类创建的对象可以描述java应用程序中的所有字符串字面值(常量)
如:“abc” , 而且该字符串字面值是个常量不能更改。
String s1 = "hello";
s1 = "world"; //本质上就是在改变s1本身的指向,而不是指向的内容。
String s1 = null; 和 String s1 = ""; 有什么区别?
前面的形式表示没有字符串对象,后面的形式表示有字符串对象但没有内容。
【自动装箱池】
在Integer类的内部提供了一个自动装箱池,该池中已经实现了-128~127之间的整数的装箱过程,因此若程序中需要使用该范围装箱时,直接可以去池中获取,不需要创建新对象。
【字符串常量池】
出亍性能的考虑,JVM会将第一次出现的字符串常量对象缓存在常量池中;对于重复出现的字符串直接量,JVM会首先在缓存池中查找,如果存在即返回该对象。 否则再新建一个对象。
String str1 = "WhatisJava";
String str2 = "WhatisJava";
System.out.println(str1 == str2); //true 常量池中已存在,即使用str1所指向的对象。
String str3 = new String("WhatisJava");
System.out.println(str1 == str3); //false 使用new关键字将会创建新的String对象,和常量池无关
常用构造方法
String() - 使用无参的形式构造对象。
String(byte[] bytes) - 使用参数指定的字节数组来构造对象。
String(byte[] bytes, int offset, int length)
- 使用bytes数组中从offset位置开始的length个字节来构造对象。
String(String original) - 使用参数指定的字符串内容来构造对象(着重关注)。
String(StringBuffer buffer) - 根据参数指定的StringBuffer对象来构造对象。
String(StringBuilder builder) - 根据参数指定的StringBuilder对象来构造对象。
常用成员方法
char charAt(int index) - 用于根据参数指定的下标返回对应位置的字符。
int length() - 用于返回字符串的长度。
int compareTo(String anotherString) - 表示按照字典顺序来比较两个字符串大小
- 若当前字符串大则返回正数; 若相等则返回0; 若当前字符串小则返回负数。
- 从第一个字符起进行对应位置的减法运算,若所有位置的字符都一样则根据字符串的长度来确定大小关系。
如:
"hello" 和 "world" ‘h’小于'w',因此"world"比较大。
"hello" 和 "hehe" 'l' 大于'h',因此"hello"比较大。
"hello" 和 "helloWorld" 由于"helloWorld"比较长,因此该字符串大.
int compareToIgnoreCase(String str) - 比较字符串的大小,不考虑大小写。
boolean equals(Object anObject) - 用于判断调用字符串和参数字符串是否相等。
boolean equalsIgnoreCase(String anotherString) - 判断是否相等但忽略大小写。
boolean contains(CharSequence s) - 判断调用字符串中是否包含参数字符串。
- 接口类型的引用作为方法的形参,实参需要传递实现类的对象/匿名内部类。
boolean endsWith(String suffix) - 判断当前字符串是否以suffix为结尾。
boolean startsWith(String prefix) - 判断当前字符串是否以prefix为开头。
String toLowerCase() - 用于将所有字符都转换为小写。
String toUpperCase() - 用于将所有字符都转换为大写。
String trim() - 用于返回字符串的副本,忽略两边的空白字符。
byte[] getBytes() - 用于将字符串内容转换为byte数组并返回。
int indexOf(int ch) - 用于根据参数指定的字符来返回对应的下标。若参数指定的字符不存在,则返回-1.
int indexOf(int ch, int fromIndex) - 从fromIndex位置开始查找ch出现的位置。
int indexOf(String str) - 查找参数指定字符串第一次出现的位置。
int indexOf(String str, int fromIndex) - 从fromIndex位置开始查找str出现位置
int lastIndexOf(int ch) - 查找ch在当前字符串中最后一次出现的位置。
int lastIndexOf(int ch, int fromIndex) - 用于从fromIndex位置开始反向查找ch出现的位置。
int lastIndexOf(String str) - 用于查找参数指定字符串最后一次出现的位置。
int lastIndexOf(String str, int fromIndex) - 用于从fromIndex位置开始反向查找str出现的位置。
String substring(int beginIndex) - 用于获取从参数指定位置开始的子字符串。
String substring(int beginIndex, int endIndex)
- 用于获取从beginIndex位置开始到endIndex位置之间的子字符串。
StringBuilder 类和StringBuffer 类
java.lang.String类是用于描述字符串字面值,但对象一旦创建则字符序列不可更改。
java.lang.StringBuilder类和StringBuffer类是用于描述可变字符序列的。
其中StringBuffer类是早期提供的类,支持线程安全,效率比较低。
其中StringBuilder类是后期增加的类,不支持线程安全,但效率高,推荐使用该类。
StringBuilder类(常用)
java.lang.StringBuilder类是用于描述可变字符序列的,可以直接更改当前字符串本身的内容。
常用的方法
StringBuilder(String str) - 根据参数指定的字符串来构造对象。其中初始容量为 16 + 参数字符串的长度。
int capacity() - 用于获取调用对象的容量并返回(初始容量+字符串长度)。
int length() - 用于获取长度(字符的个数)并返回。
int indexOf(String str) - 查询str的位置(下标)并返回。
StringBuilder reverse() - 反转字符序列。
StringBuilder insert(int offset, String str) - 将str插入到offset的位置上。
StringBuilder append(String str) - 将str追加到当前字符串的末尾。
StringBuilder delete(int start, int end) - 将字符串中从start位置(包含)到end位置(不包含)的内容删除。
StringBuilder replace(int start, int end, String str) - 将字符串从start到end用str替换。
该类没有重写equals()、hashCode()方法,但重写了toString()方法的原因?
没有必要,因为它直接对当前字符串操作,而Sting类,当字符串改动时,会创建新的内存空间来存放改动的内容