字符串:是Java中特殊的类,也是属于引用类型(除了8种基本类型之外,所有都是引用类型的)。使用方法像一般的基本数据类型,被广泛应用在 Java 编程中。Java 没有内置的字符串类型,而是在标准Java类库中提供了一个 String 类来创建和操作字符串。
String类:
1、字符数组是只有数据,没有操作。字符串相当于字符数组+操作,String内部就是一个char数组。
2、String 类有 11 种构造方法,这些方法提供不同的参数来初始化字符串。
3、String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了。如果修改了一个字符串的值,那么就会新建一个新的字符串,这时候存在两个字符串(旧字符串和新字符串)。如果对字符串进行多次修改,则会产生多个字符串,所以当需要对字符串进行多次修改时,应当使用StringBuffer或者StringBuilder。
4、length() 方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;length属性是针对Java中的数组来说的,要求数组的长度可以用其length属性;size() 方法是针对泛型集合来说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看。
5、如果在程序中直接声明一个字符串,如String s=“hello”;在程序编译就确定了字符串常量。对于String str=s;这些字符串变量都是在编译时才会确定的,它会被放入常量池中,并没有在运行时在堆上创建新的字符串对象,并且jvm保证相同的字符串常量只有一个,不会产生多个副本,因此它们所指向的对象是相等的。而对于运行过程中确定的字符串,产生字符串则被保存在堆上,同时也会被放入常量池中,因此当比较两个运行时产生的字符串对象时,比较是它们堆内存的地址值,因此两个对象是不同的。
当执行语句,String s=new String(“hello”);语句执行完,实际上会生成了两个对象,一个是在内存堆上,另一个是在常量池中。
常量池:
是一个内存空间,不同于使用new关键字创建的对象所在的堆空间。常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。当需要一个对象时,就可以从池中取出一个出来(如果池中没有则创建一个),则在需要重复创建相等变量时节省了很多时间。在编译时期被确定,并被保存在已编译的.class文件中的一些数据,包括类,方法,接口中的常量和字符串常量。常量池还具备动态性,运行期间可以将新的常量放入池中。
String类支持的方法介绍:
char charAt(int index):返回指定索引处的 char 值。
int compareTo(Object o):把这个字符串和另一个对象比较。
int compareTo(String anotherString):按字典顺序比较两个字符串。
int compareToIgnoreCase(String str):按字典顺序比较两个字符串,不考虑大小写。
String concat(String str)将指定字符串连接到此字符串的结尾。
boolean contentEquals(StringBuffer sb):当且仅当字符串与指定的StringBuffer有相同顺序的字符时候返回真。
static String copyValueOf(char[] data):返回指定数组中表示该字符序列的 String。
static String copyValueOf(char[] data, int offset, int count):返回指定数组中表示该字符序列的 String。
boolean endsWith(String suffix):测试此字符串是否以指定的后缀结束。
boolean equals(Object anObject):将此字符串与指定的对象比较。
boolean equalsIgnoreCase(String anotherString):将此 String 与另一个 String 比较,不考虑大小写。
byte[] getBytes():使用平台的默认字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
byte[] getBytes(String charsetName):使用指定的字符集将此 String 编码为 byte 序列,并将结果存储到一个新的 byte 数组中。
void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):将字符从此字符串复制到目标字符数组。
int hashCode():返回此字符串的哈希码。
int indexOf(int ch):返回指定字符在此字符串中第一次出现处的索引。
int indexOf(int ch, int fromIndex):返回在此字符串中第一次出现指定字符处的索引,从指定的索引开始搜索。
int indexOf(String str):返回指定子字符串在此字符串中第一次出现处的索引。
int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。
String intern():返回字符串对象的规范化表示形式。
int lastIndexOf(int ch):返回指定字符在此字符串中最后一次出现处的索引。
int lastIndexOf(int ch, int fromIndex):返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。
int lastIndexOf(String str):返回指定子字符串在此字符串中最右边出现处的索引。
int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。
int length():返回此字符串的长度。
boolean matches(String regex):告知此字符串是否匹配给定的正则表达式。
boolean regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len):测试两个字符串区域是否相等。
boolean regionMatches(int toffset, String other, int ooffset, int len):测试两个字符串区域是否相等。
String replace(char oldChar, char newChar):返回一个新的字符串,它是通过用 newChar 替换此字符串中出现的所有 oldChar 得到的。
String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串匹配给定的正则表达式的第一个子字符串。
String[] split(String regex):根据给定正则表达式的匹配拆分此字符串。
String[] split(String regex, int limit):根据匹配给定的正则表达式来拆分此字符串。
boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始。
boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始。
CharSequence subSequence(int beginIndex, int endIndex):返回一个新的字符序列,它是此序列的一个子序列。
String substring(int beginIndex):返回一个新的字符串,它是此字符串的一个子字符串。
String substring(int beginIndex, int endIndex):返回一个新字符串,它是此字符串的一个子字符串。
char[] toCharArray():将此字符串转换为一个新的字符数组。
String toLowerCase():使用默认语言环境的规则将此 String 中的所有字符都转换为小写。
String toLowerCase(Locale locale):使用给定 Locale 的规则将此 String 中的所有字符都转换为小写。
String toString():返回此对象本身(它已经是一个字符串!)。
String toUpperCase():使用默认语言环境的规则将此 String 中的所有字符都转换为大写。
String toUpperCase(Locale locale):使用给定 Locale 的规则将此 String 中的所有字符都转换为大写。
String trim():返回字符串的副本,忽略前导空白和尾部空白。
static String valueOf(primitive data type x):返回给定data type类型x参数的字符串表示形式。