今天是String 类
- String类是fina类 不可被继承 不可被重写
- String的成员变量是 private final char value[];----->也就是String 字符串不可变的原因
- 来看一下几个构造方法
-
public String() //1 --- 无参构造函数
-
public String(String original) //2 --- 把传进来的参数的值赋给实例对象
-
public String(char value[]) //3 把传入值初始化拷贝给实例对象
-
public String(int[] codePoints, int offset, int count) //4 这个特殊一点 其实和上面一样 传入Ascll码的数字 也就相当于char 数组了
-
- 再说一下字符串常量池 ------- 字符串常量池位于堆内存中,专门用来存储字符串常量,可以提高内存的使用率,避免开辟多块空间存储相同的字符串,在创建字符串时 JVM 会首先检查字符串常量池,如果该字符串已经存在池中,则返回它的引用,如果不存在,则实例化一个字符串放到池中,并返回其引用
//字符串常量池 String s3 = "abc"; //在常量池中创建 String s4 = "abc"; //常量池中已经存在 返回对象引用 System.out.println(s3 == s4); //true String s5 = new String("abc"); //这里是在堆中开辟了新的空间 System.out.println(s3 == s5); //false - 接下来说一下字符串一些常用的方法
-
public String substring(int beginIndex, int endIndex)//字符串的截取 // 左闭右开
//字符串的截取 // 左闭右开 String s6 = "abcdef"; System.out.println(s6.substring(1,5)); //bcde -
public int compareTo(String anotherString)//字符串的比较
//字符串的比较 前面的减去后面的 // 大于 0 前面的比后面大 //同样的还有compareToIgnoreCase 忽略大小写来比较 String s7 = "a"; String s8 = "b"; System.out.println(s7.compareTo(s8)); //-1 就是a减去b的Ascll码 -
public String concat(String str)//字符串拼接(配图中有原理解释)
//通过调用Arrays.copyOf() 复制一个新的字符串 //再通过getChars() 把需要拼接的字符串嫁接到复制结束的字符串上面 String s9 = "abc"; String s10 = "abc"; s9.concat(s10); -
public int indexOf(String str) public int indexOf(int ch) //单个字符的查找可传入单个字符 也可以传入该字符的Ascll码 也可以传入字符串 最后返回其所在位置
-
//字符串单个字符的查找 可用传入字符和ascll码 String s11 = "zxcvbn"; System.out.println(s11.indexOf("x")); //1 System.out.println(s11.indexOf(98)); //4 -
String replace(CharSequence target, CharSequence replacement) //字符串中字符的替换 如果想传入匹配规则替换 正则表达式 就可以调佣这个 public String replaceAll(String regex, String replacement)
//字符串中字符的替换 String s12 = "woaizhongguo"; System.out.println(s12.replaceFirst("o", "a"));
-
再看一下其他的方法 public boolean regionMatches(int toffset, String other, int ooffset,int len) 区域匹配的方法 见示例
//其他方法 //regionMatches() String s13 = "asdfgh"; String s14 = "bsdujh"; //第一个参数 调用的字符串的起始位置 //第二个参数 是被调用的字符串 //第三个参数 是被调用的字符串的起始位置 //第四个参数 是匹配的长度 System.out.println(s13.regionMatches(1, s14, 1, 2)); - 最后我们看一下public boolean contains(CharSequence s) 包含方法
它的底层实现是上面讲的index方法区比较的//底层是调用了index()方法 boolean asd = s13.contains("asd"); System.out.println(asd); //true -
还有其他的一些对于字符串的变化操作 基于String 的不可变性 我们对于不同的场景使用StrigBuilder StringBuffer 两个类来进行操作 ----> 详情 请看我本专栏的下一篇博客



