String在Java中用来存储字符串。内容由final修饰,不可改变,若要修改只能用新的对象来代替。
常见String构造方法
直接用字符串
String str="test";
这种会在常量池创建字符串,str在栈中存入的地址指向常量池中的具体内容
public String()
String str=new String();
在堆内存中创建空字符串
public String(char[] chars)
String str=new String(chars);
传入字符数组,根据其内容创建新字符串
public String(String original)
String str=new String(original);
接收String对象, 根据其内容创建新字符串
字符串拼接赋值
String str1 = "abc";
String str2 = "ab";
String str3 = str2 + "c";
String str4 = "a" + "b" + "c";
首先str1和str2的内容是存入常量池中的。
然后像str3和str4这种是先处理等号右边的,但这两个又有所不同。
其中str3右边会创建一个StringBuilder对象,然后通过append()方法拼接内容,最后用toString()方法在堆内存创建String对象赋给str3。
而str4是通过常量优化机制将等号右边的处理成"abc",再赋给str4。
由于str1和str4都是在常量池中地址相同,所以str1==str4的值为true。而str3是再堆中创建的String对象,地址和前两个不同,所以str1==str3值为false。
一些String常用方法
内容比较
由于String不是基本数据类型,所以不用==比较其内容,而是用equals()方法比较。
boolean bool = str1.equals(str2);
还有一个equalsIgnoreCase()方法,不考虑大小写
boolean bool = str1.equalsIgnoreCase(str2);
比较的结果是boolean类型数据,内容一样则返回true,否则返回false
length() 获得长度
由length()方法获得,和数组不同
int leng = str1.length();
toCharArray()
将String字符串转化为char[]字符数组
char[] chars=str1.toCharArray();
charAt()
获取对应索引位置的字符,返回char字符,可用于遍历字符串。String字符串索引从0开始
char c=str1.charAt(2);
substring()
字符串截取,返回String,和Python的字符串截取差不多
String str=str1.substring(1);
String str=str1.substring(0,2);
第一个:截取从索引1开始到最后一个字符,包括最后一个字符
第二个:截取从索引0开始到索引2字符,不包括索引2的字符
replace()
字符串替换,返回String,可用于屏蔽脏话、隐藏号码等
这里用第二个举例,将tmd替换为***
String str=str1.replace("tmd","***");
split()
字符串切割,返回String[]
String[] strings=str1.split(",");
//"姓名,性别"
//["姓名","性别"]