java八股文-String存储原理

本文探讨了Java中String类型的不可变性,并解释了为何字符串常驻于方法区的字符串常量池,以提高执行效率。同时,文章通过源码分析了String、StringBuilder和StringBuffer三者之间的区别,包括String的final修饰数组特性,StringBuilder的线程不安全但高效,以及StringBuffer的线程安全但效率较低的特点。
摘要由CSDN通过智能技术生成

String类讲解

  • String类型是不可变的
  • java中用双引号括起来的字符串,例如“abc”,“def”,都是直接存储在“方法区”的“字符串常量池”当中的。
  • 为什么把字符串存储在一个“字符串常量池”当中呢?
    • 因为字符串在实际开发中使用太频繁
    • 为了提高执行效率,所以把字符串放到了方法区的“字符串常量池”当中

在这里插入图片描述
以上代码在JVM中加载过程
在这里插入图片描述

在这里插入图片描述

String、StringBuilder、Stringbuffer部分源码解读

  • String底层数组用final修饰,不可变

  • StringBuilder底层数组没有用final修饰,可变;线程不安全,效率高(一般用的多)

  • StringBuffer底层数组没有用final修饰,可变;线程安全,效率低(一般用的少)
    方法都采用可synchronized修饰

  • jdk1.8中String部分源码解读
    在这里插入图片描述

  • jdk1.8中StringBuilder部分源码解读
    在这里插入图片描述
    jdk1.8中AbstractStringBuilder部分源码解读
    在这里插入图片描述
    jdk1.8中的Stringbuffer部分源码解读
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值