String类

  1. String 对象用来保存字符串,也就是一组字符序列
  2. 字符串常量对象使用双引号括起的字符序列
  3. 字符串的字符使用Unicode字符编码,一个字符占两个字节
  4. String类较常用构造器:
    • String s1 = new String();
    • String s2 = new String(String original);
    • String s3 = new String(char[] a);
    • String s4 = new String(char[] a,int startIndex,int count);
      String 类实现了接口 Serializable 【Strign 可以串行化:可以在网络传输】,还有接口Comparable 【String对象可以比大小】
      String类是final类,不能被其他的类继承
      String又属性private final char value[],用于存放字符串内容
      一定要注意: value是一个final类型,不可以修改它的地址

String创建剖析

创建String对象得两种方式:

  1. 方式1: 直接赋值 String str = “hello”;
  2. 方式2: 使用构造器 String str = new String(“hello”);

方式1: 先从常量池查看是否又"hello"数据空间,如果有,直接指向;如果没有则重新创建,然后指向。s最终指向得是常量池的空间地址
方式2: 现在堆中创建空间,里面维护了value属性,指向常量池的hell空间,如果常量池没有“hello”,重新创建,如果有,直接通过value指向,最终指向的是堆中的空间地址

package cn.meowrain.WrapperClass;

public class wrapper06 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        String str4 = new String("hello");
        
    }
}

两种方式的内存分布图:

package cn.meowrain.WrapperClass;

public class wrapper06 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        String str4 = new String("hello");
        System.out.println(str1 == str2); //T
        System.out.println(str1.equals(str2));//T
        System.out.println(str3 == str4);//F
        System.out.println(str3.equals(str4));//T

    }
}

String 类的常用方法

String类是保存字符串常量的,每次更新都需要重新开辟空间,效率较低,因此java设计者还提供了StringBuilderStringBuffer来增强String的功能,并提高效率

StringBuffer类

StringBuffer代表可变的字符序列,可以对字符串内容进行增删。
StringBuffer是一个容器

String vs StringBuffer

  1. String 保存的是字符串常量,里面的值不能更改,每次String类的更新实际上就是更改地址,效率较低
  2. StringBuffer保存的是字符串变量,里面的值可以更改,每次StringBuffer的更新实际上可以更新内容,不用更新地址,效率较高
package cn.meowrain.StringBuffer_;

public class str01 {
    public static void main(String[] args) {
        StringBuffer stringBuffer = new StringBuffer();
         stringBuffer.append("hello");
         stringBuffer.insert(2,"nice");
        System.out.println(stringBuffer);//henicello

    }
}

StringBuffer类的常用方法

StringBuilder是单线程,速度更快(没有线程安全)