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

Java的+号详解 与 字符串拼接的底层逻辑

+号详解:

    1 左右两边是数值型,做加法运算
    2 有一边是字符串,则拼接     
    3 两个字符串相加与两个字符相加截然不同
      数据库性别字段   到底用字符,还是字符串需要考量
      
    注意运算顺序:从左到右运算

字符串拼接的底层逻辑:

        前置知识:Java有字符串常量池的,凡是直接=出来的字符串对象(不是new的)都在常量池中

        全是常量拼接:有编译器的常量优化,相当于直接拼接,没有运算的

        有变量参与:

                Java8前:底层新new一个空stringbuilder对象,然后将=两边一个个放入拼接()调用append方法,每放入一 个就是一个新的stringbuilder对象,最后转为string对象(toString方法,底层就是new String())效率低

                java8后:jvm会估算拼接后的总长度,会先new一个空的stringbuilder对象,然后将=两边的字符串字符放入这个对象的底层数组中(不调用append方法,直接放入底层数组),最后转为string对象(toString方法,底层就是new String()),效率稍微高点

注意1:如果是有大量的字符串拼接,还是用stringbuilder好,不要用+号,否则会创建很多对象(很多stringbuilder对象和中间过程的string对象),影响效率

注意2:字符串常量池的对象和new出来的对象物理地址是不同的,==判断出来也是false-》面试题

                编译器的常量优化:如果字符串常量池有,会直接取,==判断的是true

注意3:stringbuilder底层:

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

        添加内容长度(字符串长度)小于16,直接存入

        大于16,数组会扩容为 原长度*2+2(添加一次,只会扩容一次)

                如果扩容后的长度还不够(先算长度,还每扩容,发现不够),会按实际长度扩容

        


http://www.kler.cn/a/156877.html

相关文章:

  • 前端Cypress自动化测试全网详解
  • 后端接口返回二进制文件,前端 window.opent预览展示
  • Ai创作新风标!仅需三步,利用ai工具免费制作抖音爆款的动物融合视频(含完整的步骤)
  • Linux手动安装nginx
  • 第8章利用CSS制作导航菜单
  • 推荐一个超漂亮ui的网页应用设计
  • 二阶变系数线性微分方程
  • 光伏设计方案中最重要的是什么?
  • 2、Linux_远程操作
  • 深入了解Java Duration类,对时间的精细操作
  • 龙迅#LT6911GX是一款高性能HDMI2.1至MIPI或LVDS芯片,支持图像处理,DSC压缩和嵌入式LPDDR4 旋转功能!
  • 【springboot原理篇】Bean的加载方式,面试必看
  • sprintf VS snprintf 函数
  • Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析
  • Linux halt命令教程:如何安全地关闭你的系统(附详细实例和注意事项)
  • 浅谈基于能耗评价指标的医院智能配电能效管理分析
  • 新版IDEA中,module模块无法被识别,类全部变成咖啡杯无法被识
  • Leetcode 538 把二叉搜索树转换为累加树
  • 管理Android12系统的WLAN热点
  • OpenAI发布一周年,那些声称超过它的模型都怎么样了?
  • 如何知道B站各分区直播数据趋势?
  • MySQL进阶_EXPLAIN重点字段解析
  • 语音芯片的BUSY状态指示功能特征:提升用户体验与系统稳定性的关键
  • JAVA Spring boot Process finished with exit code 0
  • golang channel执行原理与代码分析
  • 基于Langchain的txt文本向量库搭建与检索