String 的构造函数:
String()
String(byte[] bytes)使用字节数组构建字符串对象
String(byte[] bytes, int offset, int length)使用一个字节数组构建字符串对象,指定字节数组开始位置的索引值和字符个数
String(char[] value) 使用字符数组构建字符串对象
String(char[] value, int offset, int count)使用字符数组构建字符串对象,并且指定使用的开始位置的索引值和字符个数
总结:使用字符数组和字节数组可以构建字符串对象。
获取的方法:
length() 获取字符串长度
char charAt(int index) 获取特定位置的字符(会出现角标越界异常)
indexOf(String str)获取指定字符串中的元素第一次出现的位置
lastIndexOf(int ch)获取指定字符串最后一次出现的位置
判断的方法:
endsWith(String suffix)判断是否以指定字符结束
isEmpty()判断字符串是否为空,字符串长度为0是返回true
contains(CharSequence s)判断字符串是否包含指定的字符
equals(Object anObject)判断字符串内容是否一致
equalsIgnoreCase(String anotherString)忽略大小写判断内容是否一致
转换的方法
toCharArray()把字符串转换成字符数组
getBytes()把字符串转成字节数组
注意:调用String的equals方法时,要注意常量在前,变量在后,以常量做为方法主体。这样做的好处是避免出现空指针异常。
其他方法
replace(char oldChar, char newChar) 替换
split(String regex)用指定的字符切割字符串,返回的字数串数组
substring(int beginIndex)指定开始的索引值截取字符串
substring(int beginIndex, int endIndex)指定开始和结束的索引值截取字符串
toUpperCase()把字符串的内容转成大写
toLowerCase()把字符串转成小写
trim()清除收尾的空格不包括中间
注意:String截取字符串的位置是startIndex开始,endIndex-1结尾,截取的原则包头不包尾
String的缺点:
字符串的内容一旦初始化,则不允许改变,如果改变就需要创建新的字符串对象。
如果需要修改在需要使用StringBuffere类
StringBuffere字符串缓冲区类:存储字符的集合容器
如果一个字符串的内容需要频繁的修改的时候需要用到字符串缓冲区类
StringBuilder 字符串缓冲区类:存储字符的集合容器
StringBuilder是StringBuffere兼容的API,也就是说StringBulider的方法与StringBuffere一样的。
StringBuilder与StringBuffere的区别:
相同点:都是字符串缓冲类,底层都是维护了一个字符数组
不同点:
StringBuffere是线程安全的,StringBuilder是线程非安全的,操作效率高。
StringBuffere是JDK1.0出现的,StringBuilder是JDK是1.5以后出现的
String str1 = "hello";
String str2 = "hello";
String str3 = new String("hello");
String str4 = new String("hello");
System.out.println("str1==str2?"+(str1==str2)); //true
System.out.println("str2==str3?"+(str2==str3)); //false
System.out.println("str3==str4?"+(str3==str4)); // false
System.out.println("str2.equals(str3)?"+(str2.equals(str3))); // true
System.out.println("str3.equals(str4)?"+(str3.equals(str4))); //true
String 内存图