美文网首页
2021-05-16 《Java 核心技术36讲》学习记录五

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

作者: _笑口常开 | 来源:发表于2021-05-19 07:21 被阅读0次

简述

此文是对 第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% 的对象是字符串,并且其中约半数是重复的

相关文章

网友评论

      本文标题:2021-05-16 《Java 核心技术36讲》学习记录五

      本文链接:https://www.haomeiwen.com/subject/rucejltx.html