1.实例化方式
直接赋值
String str = "hello";
构造方法赋值
String str = new String("hello");
两种实例化方式的区别
2.字符串的相等比较
"=="操作符用于比较两个变量的值是否相等,对于基本类型而言,比较的就是数值大小;对于引用类型而言,比较的实际上是保存的地址是否相等而不会比较内容。
所以在字符串内容比较时,需要使用String类提供的equals()方法,它区分大小写;equalsIngoreCase()不区分大小写比较。
str1.equals(str2);
3.String类的匿名对象(没起名字的对象)
所有字符串常量""都是String类的匿名对象。
在比较字符串是否等于特定字符串时,将字符串常量写在equals前,通过字符串常量来比较。
"hello".equals(str);
4.字符串常量不可变更:堆中常量的值无法修改,但是栈中的指向可以更改
字符串不要改变太多次,慎用"+"(防止产生垃圾空间)。
5.字符与字符串的相互转换
char[]->String
public String(char[] value) : 将字符数组全部转为字符串
public String(char[] value,int offset,int len) : 将字符数组的部分内容转为字符串
String->char
public char charAt(int index) : 取得字符串指定索引的字符,从0开始
String->char[]
public char[] toCharArray() : 将字符串转为字符数组
6.字节与字符串的相互转换
字节用在二进制流与网络传输中。
byte[] -> String
public String(byte[] value) : 将字节数组全部转为字符串
public String(byte[] value,int offset,int len) : 将字节数组的部分内容转为字符串
String -> byte[]
public byte[] getBytes() : 将字符串转为字节数组
public byte[] getBytes(String charSet) : 将字符串按照指定编码格式转为字节数组
不同的操作系统有不同的编码格式,linux默认编码为UTF-8,windows默认编码为GBK。
7.String与基本类型的相互转换
String -> 基本类型
使用各个包装类提供的parseXX(),eg:Integer.parseInt(str)
当字符串中包含了非数字,在运行时会抛出NumberFormatException
基本类型->String
“+”
通过String的构造方法
推荐:使用String.valueOf(所有基本类型)
8.字符串比较方法
比较相等:equals、equalsIngoreCase
比较大小:public int compareTo(String anotherString) : 比较两个字符串的大小关系
按照ASCII码比较,只要发现不相等的内容算出差值直接返回,不会继续向下查找。
9.字符串查找
10.字符串替换
public String replaceAll(String regex,String replacement) : 将字符串中所有指定内容替换为新内容
public String replaceFirst(String regex,String replacement) : 替换首个内容
11.字符串拆分
public String[] split(String regex) : 按照指定格式将字符串全部拆分。
public String[] split(String regex,int limit) : 将字符串部分拆分,数组长度为限定limit长度。
13.字符串截取
public String substring(int beginIndex) : 从指定索引开始截取到字符串结尾。
public String substring(int beginIndex,int endIndex) : 从指定索引开始到指定结束位置。
13.其他方法
14.StringBuffer与StringBuilder
StringBuffer:为了方便进行字符串内容的修改。
字符串拼接使用append()方法。
StringBuffer与String的相互转换
String -> StringBuffer:
通过StringBuffer的构造方法:public StringBuffer(String str)
通过append(String str)
StringBuffer -> String:
调用StringBuffer的toString();
StringBuffer的独有方法:
字符串反转:reverse()
删除指定位置字符串: delete(int start, int end)
在指定位置插入任意元素:insert(int offset, 各种数据类型 )
StringBuilder与StringBuffer的用法基本相同。
String与StringBuffer、StringBuilder的区别?
1.String常量内容不可修改,而StringBuffer与StringBuilder的内容可以修改;
2.StringBuffer使用同步处理,线程安全,性能较低;StringBuilder使用异步处理,线程不安全,性能较高。
在普遍场景下,推荐使用StringBuilder。当String对象使用"+"进行字符串拼接时,javac编译器会将String对象变为StringBuilder而后调用append()来修改字符串内容,减少无用空间的开辟。