一、字符串存储原理:
public class Test {
public static void main(String[] args) {
String s1="abcdef";
String s2="abcdef"+"xy";
String s3 = new String("xy");
}
}
- "abcdef"不可变,保存在常量池中。(双引号括起来的都在常量池中)
- new 出来的对象则都是在堆里开辟空间。
- 垃圾回收期不会回收常量池里的常量。
以下代码创建了几个对象?
public class Test {
public static void main(String[] args) {
String s1 = new String("abc");
String s2 = new String("abc");
}
}
答案:3个。字符串常量池中创建一个“abc”, 堆内存中有两个String 对象。
二、String类方法:
1.返回字符串某个位置的字符
s.charAt(x);
- 返回字符串s中x位置的字符,第一个字符位置x是0。
2.比较字符串大小
s1.compareTo(s2);
- 从第一个字符开始挨个比较两个字符串字典序是否相同。相同为0,不相同±1。(前大后小1,前小后大-1)
3.将“非字符串”转换成“字符串”
String.valueOf(3.14);
- 将非字符串3.14转换成字符串“3.14”。
- 实际上该方法调用了Object类的toString()方法。
4.返回字符串本身
s.toString();
- string类已经重写了toString方法和equals方法。
- 把对象s转换成字符串对象。
5.判断字符串是否包含某个子串
s.contains(x);
- 字符串s是否包含字符串x。
6.判断当前字符串自否以某个字符串开始
s.startsWith(x);
- 字符串s是否以字符串x开始。
7.判断当前字符串自否以某个字符串结尾
s.endWith(x);
- 字符串s是否以字符串x结尾。
8.比较两个字符串是否相等
s.equals(x);
- 字符串s是否等于字符串x,不能用“==”。
- equals判断相等,compareTo既可以判断相等,也可以判断谁大谁小。
9.比较两个字符串是否相等,忽略大小写
s.equalsIgnoreCase(x);
- 忽略大小写后字符串s是否等于字符串x,不能用“==”。
10.将字符串对象转换成字节数组
s.getBytes();
- 字符串s转换为字节数组,返回字节数组。
11.字符串转char数组
s.toCharArray();
- 返回值是一个char数组。
12.判断某个子字符串在当前字符串中第一次出现处的索引
s.indexOf(x);
- 若存在返回x第一个字母位置的下标。
13.判断某个子字符串在当前字符串中最后一次出现处的索引
s.lastIndexOf(x);
- 若存在返回x第一个字母位置的下标。
13.判断字符串是否为空字符串
s.isEmpty();
- 空字符串是“ ”,不是null。
- null会空指针异常。
- 也可以用s.length()==0判断
14.字符串长度
s.length();
- 注意字符串调用的是方法,而数组则是shuzu.length,调用的是属性。
15.字符串子串替换
s.replace(old,new);
- 将s字符串中所有old子串替换为new子串,返回值是替换后的字符串。
16.拆分字符串
s.split(x);
- 字符串s以字符串x进行拆分,返回值是一个String数组。
17.截取字符串
s.substring(start,end);
- 截取字符串start~end-1的子字符串。
19.字符串中所有字符转小写
s.toLowerCase();
- 返回值是小写字符串。
20.字符串中所有字符转大写
s.toUpperCase();
- 返回值是大写字符串。
21.删除字符串前后空格,不包括中间的空格
s.trim();