java复习——String类

119 阅读2分钟

String类

String用于保存字符串,也就是一组字符序列

字符串本质是char数组

char数组的地址不可修改

字符串的内容是不可变的,一旦被分配,内容是不可变的

image.png

image.png String的两种创建方式

  1. 直接赋值

    JVM内存布局

    1. 在栈的方法中声明一个s1

    2. 在方法区的常量池中查找,有没有"hhh";

      如果有"hhh",那么s1指向"hhh"的地址

      如果没有,就在常量池中创建"hhh",并且将s1指向"hhh"的地址

String s1 = "hhhh";
  1. 创建对象赋值

    JVM内存布局

    1. 在栈的方法中声明一个s2

    2. 在堆中创建一个字符串对象

    3. 栈中s2指向该对象的地址

    4. 在方法区的常量池中查找,有没有"xxx";

      如果有"xxx",那么该对象的value指向"xxx"的地址

      如果没有,就在常量池中创建"xxx",并且将该对象的value指向"xxx"的地址

String s2 = new String("xxxx")

1.String特性

字符串的拼接

String s1 = "abc" + "def";
//这里在底层进行了优化
//底层会直接把"abc" + "def"转换成"abcdef"
String s1 = "abc";
String s2 = "def";
String s3 = s1 + s2;
//这里s1+s2与上面"abc" + "def"不同
//底层:1.首先创建一个StringBuild sb = new StringBuild();
//     2.sb.append("abc")追加abc
//     3.sb.append("def") 在abc后面追加def
//     4.使用String s3 = sb.toString() 

2.常用方法

image.png image.png

3.StringBuffer

可变长度的字符序列,内容可以被修改

线程安全,速度慢

String和StringBuffer的转换

class test{
    String s = "qweq";
    //String————>StringBuffer
    //方式一
    StringBuffer sb1 = new StringBuffer(s);//如果s = null时,这里会抛出空指针异常
    //方式二
    StringBuffer sb2 = new StringBuffer();
    sb2.append(s);
    
    //StringBuffer————>String
    //方式一
    String s1 = sb1.toString();
    //方式二
    String s2 = new String(sb2)
}

常用方法

class test{
    StringBuffer sb = new StringBuffer("hollw");
    //增加
    sb.append("word");
    //删除
    sb.delete(start,end);//不包含end
    //修改
    sb.replace(start,end,String);//不包含end
    //查询
    sb.indexOf(String);
    //插入
    sb.instert(index,String);//在下标后面插入字符串
}

4.StringBuilder

可变长度的字符序列,内容可以被修改

与StringBuffer类似,有相同的API

线程不安全的,速度快;单面线程优先使用

StringBuilder是个final类,不能被继承

5.String || StringBuffer || StringBuilder

  1. StringBufferStringBuilder类似,都是可变的字符序列方法相同
  2. String:不可变字符序列,效率低,复用性高
  3. StringBuffer:线程安全的,速度慢(多线程)
  4. StringBuilder:线程不安全的,速度快(单线程)

效率排行

StringBuilder > StringBuffer > String