当前位置: 首页 > news >正文

字符串的原理

目录

 

1.字符串储存的内存原理

2.== 号比较的到底是什么?

3.字符串拼接的底层原理

 4.StringBulider提高效率原理图

5.StringBuilder 源码分析


 

1.字符串储存的内存原理

直接赋值会复用字符串常池中的

new出来不会复用,而是开辟一个新的空间

2.== 号比较的到底是什么?

基本戴数据类型比较数据值

引用数据类型比较地址值

3.字符串拼接的底层原理

第一类:没有变量参与

字符串直接相加,编译之后就是拼接之后的结果了,会复用串池中的字符串

第二类:有变量参与 

 会创建新的字符串,浪费内存

结论:如果很多字符串变量拼接,不要直接+。在底层会创建多个对象,浪费时间,浪费性能

 4.StringBulider提高效率原理图

所有要拼接的内容都会往StringBuilder中放,不会创建很多无用的空间,节约内存

字符串拼接的时候,如果有变量:

JDK8以前:系统底层会创建一个StringBuilder对象,然后再调用其append方法完成拼接,

拼接后,再调用tostring 方法转换为String类型,而toString方法 的底层直接new 了一个字符串对象

JDK8版本:系统会预估要字符串拼接之后的大小,把拼接的内容都放在数组中,此时也是产生一个新的字符串

5.StringBuilder 源码分析

默认创建一个长度为16的字节数组

添加的长度小于16,直接存

添加的内容大于16会扩容(原来的容量* 2  +2)

如果扩容长度还不够,以实际长度为准

public class w{
    public static void main(String[] args) {
        //容量:最多装多少
        //长度:已经装了多少
        StringBuilder sb = new StringBuilder();

        System.out.println(sb.capacity());
        System.out.println(sb.length());
        sb.append("abc");

        System.out.println(sb.capacity());
        System.out.println(sb.length());

    }
}

运行结果

16
0
16
3

 

 

相关文章:

  • string的模拟实现
  • 探秘 Mininet:解锁网络仿真与 SDN 开发的密码
  • 【练习】【栈】牛客NC212914牛牛与后缀表达式
  • Tax with SAP S4HANA (Michael Fuhr, Dirk Heyne, Nadine Teichelmann etc.)
  • DeepSeek 与云原生后端:AI 赋能现代应用架构
  • FunPapers[3]:WWW‘25「快手」生成式回归预测观看时长
  • AI: Cursor是否已奠定AI开发环境的龙头地位?
  • GIT工具学习【1】:基本操作
  • 【Linux】【网络】不同子网下的客户端和服务器通信其它方式
  • Linux之yum详解
  • 算法-二叉树篇17-二叉搜索树中的搜索
  • LSTM预测模型复现笔记和问题记录
  • 通往 AI 之路:Python 机器学习入门-数据结构
  • BGP分解实验·20——BGP选路原则之路径属性
  • Java中Stream流的详细使用介绍
  • 华为OD机试真题:跳房子I (E卷、Java)
  • SpringBoot 项目集成 Prometheus 和 Grafana
  • 项目准备(flask+pyhon+MachineLearning)- 3
  • 计算机毕业设计SpringBoot+Vue.js线上辅导班系统(源码+文档+PPT+讲解)
  • 授权与认证之jwt(五)创建ShiroConfig类
  • 人民日报今日谈:科技赋能,继续把制造业搞好
  • 北斗专访|星纪魅族郭鹏:AR眼镜正迈入行业发展“破局之年”
  • 国家统计局督察组:江苏有关地区仍存在干预数据上报等问题
  • 印度空军为“阵风”战机换装国产导弹,以增强作战能力推动国防自主
  • “宝马女司机驾车拖行虐猫”引关注,海口警方介入调查
  • 国家发改委:正在会同有关方面,加快构建统一规范、协同共享、科学高效的信用修复制度