String类的特点
在java语言当中,对于String这个类的使用绝对是非常的频繁,今天巩固一下这个类的使用方法,值得注意的是,String类每一个对象实例都是不可变的,也就是说在初始化值实例之后,这个类实例的值是不可变的,当值发生改变的时候对象也就跟着改变了。
public static void main(String[] args) {
String str="Stirng";
System.out.println("未改变之前str的地址是:"+System.identityHashCode(str));
str=str+"改变";
System.out.println("改变之后str的地址是:"+System.identityHashCode(str));
}
输出的结果是:
未改变之前str的地址是:366712642
改变之后str的地址是:1829164700
这里可以看到,两次str输出的地址是不一样的,因为String类是不可变的,当改变str变量值得时候,虚拟机其实是会重新创建一个新的对象赋值给str这个变量,所以在改变str这个变量的时候,其实对象内存是发生了改变的。java虚拟机内存中有堆和栈,栈是用来存放变量的,而堆是用来存放对象数据的,java虚拟机在创建变量的时候如:String str="String" ,会首先在栈中开辟一个空间来存放str这个变量,然后在堆中开辟一个空间来存放对象,然后将a指向堆开辟的地址,这里的指向地址和初始化顺序是不确定的。当str值改变的时候,虚拟机会重新再堆中创建一块空间来存放新的对象,再将a指向这块新的地址。
String类的构造函数
String类的构造函数有很多,主要分为几种,一种是直接构造字符串,第二种是通过字节码和编码格式构造,还有一种是通过字符数组构造。
String() | 创建一个空的字符串对象 |
String(String ) | 创建一个参数的String对象副本 |
String(StringBuffer) | 根据StringBuffer中的值创建一个String对象 |
String(StringBuilder) | 根据StringBuilder创建一个String对象 |
String(byte[] bytes) | 根据字节码创建String对象,使用当前平台编码方式 |
String(byte[] bytes, Charset charset) | 根据字节码创建String对象,使用指定编码方式 |
String(byte[] bytes, int offset, int length) | 从offset开始截取bytes中length长度的字节码创建String对象 |
String(byte[] bytes, int offset, int length, Charset charset) | 从offset开始截取bytes中length长度的字节码创建String对象,指定编码方式 |
String(byte[] bytes, int offset, int length, String charsetName) | 从offset开始截取bytes中length长度的字节码创建String对象,指定编码方式 |
String(byte[] bytes, String charsetName) | 指定编码方式,根据字节码创建String对象 |
String(char[] value) | 根据字符数组创建String对象 |
String(char[] value, int offset, int count) | 从value字符数组中从offset开始,截取count长度的字符创建String对象 |
String常用方法
1.char chartAt(int index);返回指定index位置的一个字符。
2.int codePointAt(int index);返回指定index位置的字符的unicode码(可以理解为ASCILL码)
3.int codePointBefore(int index);返回指定index-1位置的字符的unicode码(可以理解为ASCILL码)
4.int compareTo(String otherString);按字典顺讯比较字符串,两个字符串第一个不同的字符进行比较
String s="learn my String";
System.out.println(s.compareTo("lbrn"));
返回结果 3,是e和b两个字符的差
5.int compareToIgnoreCase(String );忽略大小写的比较
6.String connact(String);将指定的字符串添加到改字符串末尾
7.boolean contains(CharSequence s);查看字符串中是否含有s,有则返回true否则false
8.boolean endWiths(String reg);判断字符串是否已reg字符串为结尾
9.boolean stratWiths(String reg);判断字符串是否已reg字符串为开头
10.boolean equals(String s);将字符串于指定的字符串进行比较
11.boolean equalsIgnoreCase(String s);将字符串于指定字符串进行忽略大小写的比较
12.byte[] getBytes();取得字符串的字节码,编码为平台编码
12 byte[] getBytes(CharSet charSet);指定编码获得字符串的字节码
13.byte[] getBytes(String charSetName);指定编码获得字符串的字节码
14.int hashCode();返回字符传串的哈希码
15.int indexOf(char ch);返回第一次出现ch的索引值
16.int indexOf(char ch,int fromIndex),从指定的fromIndex开始搜索,返回第一次出现ch的索引值
17.int indexof(String str),返回第一次出现字符串str的索引值
18.int indexOf(String str,int fromIndex);,从指定的fromIndex开始搜索,返回第一次出现str的索引值
19.lastIndexOf(char ch)返回最后一次出现ch的索引值,其他的和indexOf一样
20.boolean matches(String regx);判断是否符合给定的正则表达式
21.replace(char old,char new);把字符串中的old,换成new
22.replace(CharSequence old,CharSequence new)把old替换为new
23.replaceAll(String regx,String new);把能和正则表达式regx匹配的替换为new
24.replaceFirst(String regx,String new );把能和正则表达式匹配的第一个替换为new
25.split(String reg);根据给定的字符串分割为字符串数组
26.subString(int begin);从begin开始截取后面的字符串为一个新的字符串
27.subString(int begin,int end);从begin开始截取到end为止创建一个新的字符创
28.toUpperCase()把所有的字符改为大写并返回新字符串
29.toLowerCase();把所有字符改为小写并返回新字符串
30.trim();把首尾两遍的空格全部去掉