一: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 开始,如果找不到,返回-1System.out.println(str.indexOf("a"));System.out.println(str.indexOf("ra"));//5.lastIndexOf 获取字符在字符串中最后一次出现的索引,// 索引从 0 开始,如果找不到,返回-1String name = "sakufafa";System.out.println(name.lastIndexOf("fa"));//6.substring 截取指定范围的子串System.out.println(name.substring(1,4));//akuSystem.out.println(name.substring(4));//fafa//7.toUpperCase 转换成大写System.out.println(name.toUpperCase());//8.toLowerCaseSystem.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' = 5System.out.println(A.compareTo(B));//(1) 如果长度相同,并且每个字符也相同,就返回 0//(2)如果长度相同或者不相同,但是在进行比较时,可以区分大小 //// 就返回 if (c1 != c2) {// return c1 - c2;// }//(3) 如果前面的部分都相同,就返回 str1.len - str2.lenString 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);}}
">
:::info
一定要学会看源码!!!!
:::
