一:String类的理解和创建对象
- String对象用于保存字符串,也就是一组字符序列
字符串常量对象是用双引号括起的字符序列。例如:”你好”、”12.97”、”boy”等
String name = "Sakura";
字符串的字符使用Unicode字符编码,一个字符(不区分字母还是汉字)占两个字节。
String类较常用构造器:
常用的构造器:
- String s1 = new String();
- String s2 = new String(String original);
- String s3 = new String(char [ ] a);
- String s4 = new String(charl a , int startlndex , int count )
- String s5 = new String (bytep [ ] b)
:::danger
String 实现了Serializable 接口,说明String对象可以串行化:
串行化(序列化):如果一个类实现了串行化,那就意味这个对象可以在网络上传输
String 实现了Comparable 接口,说明String对象可以比较大小
:::
- String 是 final 类,不能被其他的类继承
String 有属性 private final char value [ ] ; 用于存放字符串内容
方式一:
- 先从常量池查看是否有”hsp”数据空间,如果有,直接指向 ; 如果没有则重新创建,然后指向。S最终指向的是常量池的空间地址
- 方式二:
- 先在堆中创建空间,里面维护了value属性,指向常量池的hsp空间如果常量池没有”hsp”,重新创建,如果有,直接通过value指向。最终指向的是堆中的空间地址。
三:String类测试题
1:
:::info
都是 True
创建b字符串的时候,因为在常量池中存在abc,所以直接指向。a和b地址一样
:::
2:
:::info
最后一个:b指向的是堆,而b.intern ( ) 指向的是字符串
注意:
当调用intern方法时,如果池已经包含一个等于此String对象的字符串(用equals(Object)方法确定),则返回池中的字符串。否则,将此String对象添加到池中,并返回此 String对象的引用
:::
3:
4:
四:字符串的特性
1:
2:
3:
4:
5:
五:String常用方法
package Date0823.Test01;
/**
* 作者:sakura
* 日期:2022年08月23日 22:52
*/
public class Test {
public static void main(String[] args) {
//1. equals 比较内容是否相同,区分大小写
String str = "sakura";
String str1 = "Sakura";
System.out.println(str.equals(str1));
//2. equalsIgnoreCase 忽略大小写的判断内容是否相等
System.out.println(str.equalsIgnoreCase(str1));
//3.length 获取字符的个数,字符串的长度
System.out.println(str.length());
//4.indexOf 获取字符在字符串对象中第一次出现的索引
// 索引从 0 开始,如果找不到,返回-1
System.out.println(str.indexOf("a"));
System.out.println(str.indexOf("ra"));
//5.lastIndexOf 获取字符在字符串中最后一次出现的索引,
// 索引从 0 开始,如果找不到,返回-1
String name = "sakufafa";
System.out.println(name.lastIndexOf("fa"));
//6.substring 截取指定范围的子串
System.out.println(name.substring(1,4));//aku
System.out.println(name.substring(4));//fafa
//7.toUpperCase 转换成大写
System.out.println(name.toUpperCase());
//8.toLowerCase
System.out.println(name.toLowerCase());
//9.concat 拼接字符串
String name1 = "Sakura";
System.out.println(name1.concat("LF").concat("FFF"));
//10.replace 替换字符串中的字符
System.out.println(name1.replace("S","冷"));
//11.split 分割字符串, 对于某些分割字符,我们需要 转义比如 | \\等
String str11 = "锄禾日当午,汗滴禾下土,谁知盘中餐,粒粒皆辛苦";
// 1. 以 , 为标准对 poem 进行分割 , 返回一个数组
// 2. 在对字符串进行分割时,如果有特殊字符,需要加入 转义符 \
String[] spirit = str11.split(",");
for (int i = 0; i < spirit.length; i++) {
System.out.println(spirit[i]);
}
str11 = "E:\\aaa\\bbb";
spirit= str11.split("\\\\");
//12.toCharArray 转换成字符数组
String name13 = "sakura";
char[] name14 = name13.toCharArray();
for (int i = 0; i < name14.length; i++) {
System.out.println(name14[i]);
}
//13.compareTo 比较两个字符串的大小,如果前者大,
String A = "sfk";
String B = "sakura";
//比较的是'f'-'a' = 5
System.out.println(A.compareTo(B));
//(1) 如果长度相同,并且每个字符也相同,就返回 0
//(2)如果长度相同或者不相同,但是在进行比较时,可以区分大小 //
// 就返回 if (c1 != c2) {
// return c1 - c2;
// }
//(3) 如果前面的部分都相同,就返回 str1.len - str2.len
String C = "sak";
String D = "sakura";
System.out.println(C.compareTo(D));
//14. format 格式字符串
String nameF = "john";
int age = 10;
double score = 56.857;
char gender = '男';
//1. %s , %d , %.2f%c 称为占位符
//2. 这些占位符由后面变量来替换
//3. %s 表示后面由 字符串来替换
//4. %d 是整数来替换
//5. %.2f 表示使用小数来替换,
// 替换后,只会保留小数点两位, 并且进行四舍五入的处理
//6. %c 使用 char 类型来替换
String formatStr = "我的姓名是%s 年龄是%d,成绩是%.2f 性别是%c.希望大家喜欢我!";
String info2 = String.format(formatStr, nameF, age, score, gender);
System.out.println(info2);
}
}