String的API
String的一条注意点:
- 这是创建了一条新的字符串name,而原先的哪个name被舍弃了;
- 并不是被赋值了;
创建String对象的方法
1. 直接赋值:见上图、内存结构见下图:
- 双引号直接赋值:检查串池,有就复用同一个地址值,没有就创建新的;
- 创建String的对象,使用构造方法:
内存结构见下图:
因为有了new关键字,所以虚拟机会在堆内存开辟一个新的空间,由字符数组copy这两个新的地址空间; 最后将地址给变量;
注意: s1 s2的地址空间是不一样的,是新创建的;
字符串常见的成员方法
字符串的比较
- 实际开发应用:账号登陆
boolean equals = username.equals(rightUsername) && oassword.equals(rightPassword);
遍历字符串
1.charAt
2.字符串的遍历
字符串的截取与替换
截取
- 字符串创建后是无法改变的,截取时不会影响原本的字符串;切记:只有返回值才是截取后的结果;
替换
案例:敏感词过滤
- replace的时候会遍历字符串,如果字符串有左边(arr[i]),就让arr[i]替换右边(***);
其他字符串常用方法
Contains
startsWith/endsWith
- 主要用于:判断文件后缀名;第二个参数为开始的索引;
- String a = “abcdaefg”;
indexOf()
- String a = “abcdaefg”;
isEmpty()
- String a = “abcdaefg”;
toCharArray()
- 用于修改字符串的内容;
toUpperCase()、toLowerCase()
- 输出结果为ABCDE
trim()
- 去除同为空格,同样用于登录(头部不小心按了个空格)
StringBuilder
- ~是字符串的一个工具类,可以让我们拼接字符串效率更高;
- 原始拼接法:创建了太多的无用字符串,占用内存;
- StringBuilder
- ~只是一个容器,最终还是要变回字符串(toStirng);
public static void main(String[] args) {
StringBuilder sb = new StringBuilder("hello");
int len = sb.length();
System.out.println(len);// 5
sb.append("world");
System.out.println(sb);// helloworld
System.out.println(sb.reverse()); // dlrowolleh
System.out.println(sb.toString()); // helloworld
}