简述
此文是对 第5讲 | String、StringBuffer、StringBuilder有什么区别? 的学习
一些知识点/笔记点:
- String 是典型的 Immutable 类,被声明成为 final class,所有属性也都是 final 的。
- 由于 String 的不可变性,类似拼接、裁剪字符串等动作,都会产生新的 String 对象
- StringBuffer 是一个过渡
- StringBuilder 在 StringBuffer 基础上去掉了线程安全的部分,有效减小了开销。
- Immutable 类的设计方法,可以参照 学习记录三
- StringBuffer 的线程安全是通过将数据和方法都套上 synchronized 来保证。
- StringBuffer 和 StringBuilder 底层都是 利用可修改的(char,JDK 9 以后是 byte)数组
- 正常使用 String 去创建字符串,而不是使用 StringBuilder, 因为 String 的底层用了 StringBuilder
(base) Rui-de-Mac:mianshi Xiaorui$ javap -v JavaKeyKnowledge.class
Classfile /Users/Xiaorui/Java/JavaSourceLearn/src/com/mianshi/JavaKeyKnowledge.class
Last modified 2021-5-16; size 492 bytes
MD5 checksum 7d0154f9564bcda32a66ceac5ec2f33c
Compiled from "JavaKeyKnowledge.java"
public class com.mianshi.JavaKeyKnowledge
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
Constant pool:
#1 = Methodref #9.#18 // java/lang/Object."<init>":()V
#2 = Class #19 // java/lang/StringBuilder
#3 = Methodref #2.#18 // java/lang/StringBuilder."<init>":()V
#4 = Methodref #2.#20 // java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
#5 = String #21 // aa
#6 = String #22 // bb
#7 = Methodref #2.#23 // java/lang/StringBuilder.toString:()Ljava/lang/String;
#8 = Class #24 // com/mianshi/JavaKeyKnowledge
#9 = Class #25 // java/lang/Object
- OOM: Out Of Memory
- 字符串缓存:把常见应用进行堆转储(Dump Heap),然后分析对象组成,会发现平均 25% 的对象是字符串,并且其中约半数是重复的
网友评论