(java笔记整理)String和StringBuffer和StringBuilder的全总结

62 阅读2分钟

String结构剖析

String是final 类,不能被其他的类继承

String有属性private final char vaLue[]; 用于存放字符串内容

注意: value 是个final类型, 不可以修改: 即value不能指向新的地址,但是单个字符内容是可以变化

两种创建String对象的区别

方式一:直接赋值String s1 = "hsp"; //s1指向常量池的"hsp"

方式二:调用构造器String s2 = new String("hsp"); //s2指向堆中对象

图解

图解

这里b.intern()方法最终返回的是常量池的地址(对象)

  1. String是一个final类, 代表不可变的字符序列

2)字符串是不可变的。一个字符串对象一旦被分配, 其内容是不可变的.

重要规则,Stringc1 = "ab" + "cd";常量相加,看的是池。Stringc1 = a + b;变量相加,是在堆中

结果=》hsp and hava

String类的常见方法应用实例

后面的最近去网上自己查就行

StringBuffer类

java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删。

很多方法与String相同,但StringBuffer是可变长度的。

StringBuffer是一个容器。

String VS StringBuffer

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

//char[] value; // 这个放在堆

看源码就行

看源码就行

StringBuffer转换

StringBuffer常用方法

append:追加

练习题

看源码

看源码

第一题的底层源码在这

第一题的底层源码在这

StringBuilder类

StringBuilder和StringBuffer均代表可变的字符序列,方法是一样的,所 以使用和StringBuffer一样

1)一个可变的字符序列。此类提供一个 与StringBuffer兼容的API,但不保证同 步(StringBuilder不是线程安全)。该类被设计用作StringBuffer的一个简易 替换,用在字符串缓冲区被单个线程使用的时候。如果可能,建议优先采用该类, 因为在大多数实现中,它比StringBuffer要快

2)在StringBuilder上的主要操作是 append和insert 方法,可重载这些方法, 以接受任意类型的数据

看源码就行

看源码就行

一级引用如下:

synchronized:已同步