2021-05-16 《Java 核心技术36讲》学习记录五

简述

此文是对 第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% 的对象是字符串,并且其中约半数是重复的
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容