在实际开发过程中,经常涉及到字符串的处理,特别是字符串的连接。常规情况下,我们都习惯了直接使用“+”来连接两个字符串,方便简洁,但又总会有人告诉你,使用“+”连接字符串是一种低效的处理方式。由于“+”不是一个特定的类,无法从jdk源码去一探究竟底层如何实现的,所以,唯一的解释就是编译器动了手脚。

L0
LINENUMBER 27 L0
ACONST_NULL
ASTORE 1
L1
LINENUMBER 28 L1
NEW java/lang/StringBuilder
DUP
INVOKESPECIAL java/lang/StringBuilder.<init> ()V
ALOAD 1
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
LDC "!"
INVOKEVIRTUAL java/lang/StringBuilder.append (Ljava/lang/String;)Ljava/lang/StringBuilder;
INVOKEVIRTUAL java/lang/StringBuilder.toString ()Ljava/lang/String;
ASTORE 1
L2
LINENUMBER 29 L2
GETSTATIC java/lang/System.out : Ljava/io/PrintStream;
ALOAD 1
INVOKEVIRTUAL java/io/PrintStream.print (Ljava/lang/String;)V 

从字节码我们能够清楚的看到“java/lang/StringBuilder.append”字样,原来如此,字符串使用“+”拼接时,底层仍然是通过StringBuilder来实现的。当两个字符串通过“+”连接时,先初始化一个StringBuilder对象,然后按顺序调用append方法来连接,最后通过toString方法返回拼接后的字符串。n个“+”号,这样的操作就会重复n次,很明显造成了没必要的消耗。

特别地,在进行sql拼接的时候,频繁的通过“+”来拼接较大的String对象,内存瞬时消耗较高,此时建议直接用StringBuilder.append("...")来拼接多个子串,并且在StringBuilder对象使用完毕后,通过delete(0,StringBuilder.length())来释放内存。

String通过“+”号拼接字符串的底层实现相关推荐

  1. 不能用 + 拼接字符串? 这次我要吊打面试官!

    好久没维护<吊打面试官>系列了,今天再来一篇,这次真的要吊打了,哈哈!(看往期吊打系列请在后台回复:吊打,我会陆续更新--) 我们做 Java 程序员以来,不管是工作当中,还是面试过程中, ...

  2. server多笔记录拼接字符串 sql_Java拼接“1亿行字符串”你会遇到什么问题?

    拼接"1亿行字符串"你会遇到什么问题? 本文将涉及到的三方面的内容,如下: 1,一个10万次的for循环,4种实现的性能对比 2,直接将For循环改为1亿次,遇到的问题 3,拓展 ...

  3. Python str join方法:拼接字符串

    目录 描述 语法 举例 1. 元素序列是列表 2. 元素序列是元组 3. 元素序列是集合 4. 元素序列是字典 5. 元素序列是字符串 注意事项 1. 要连接的字符串序列(参数)必须是字符串 2. 字 ...

  4. Java拼接字符串(包括空字符串)的多种方法

    目录 一:问题展示 二:拼接方法 1.使用 "+" 运算符 2.使用String.concat() 3.使用StringBuilder 4.使用StringJoiner 5.使用S ...

  5. shell for循环拼接字符串

    # 在当前目录下创建文本文件temp,如果文件存在则清空文件 $(> temp) # for 循环将参数追加到当前目录的temp文件,逗号分隔,echo -n 不换行 for i in $*;d ...

  6. android string拼接字符串_「JAVA」细述合理创建字符串,分析字符串的底层存储,你不该错过...

    Java基础之字符串操作--String 字符串 什么是字符串?如果直接按照字面意思来理解就是多个字符连接起来组合成的字符序列.为了更好的理解以上的理论,我们先来解释下字符序列,字符序列:把多个字符按 ...

  7. android string拼接字符串_String对象的存储、拼接和比较

    一.String类型介绍 String类型是引用数据类型,表示字符串类型.String底层使用byte[]数组来存储char[]数组.(JDK1.9及以后的版本,JDK1.9之前是使用char数组保存 ...

  8. java用 拼接字符串的原理_Java String 拼接字符串原理详解

    首先来一道思考题: String str1 = "111111"; String str2 = "222222"; String str = str1 + st ...

  9. java 加单引号_【沫沫金】Java逗号拼接字符串增加单引号

    背景 页面提供逗号拼接的字符串,可作为数据库查询in的条件. a,b 问题 数据库针对字符串的in条件,要求增加单引号 xx in ('a','b') 需求 页面的逗号拼接字符串直接转换成数据库要求格 ...

最新文章

  1. Linux运维中如何进行网页加密?
  2. 高职学生如何成为编程高手
  3. SD Card Formatter for Mac Download
  4. 自动装箱自动拆箱java,自动装箱?拆箱?==问题?详解java面试常见的一个问题...
  5. springBoot修改代码不需要重启-热部署
  6. python-基础回顾
  7. CSS IE6躲猫猫Bug
  8. 吴恩达《机器学习》第十三章:聚类
  9. mysql外键_MySQL外键约束(FOREIGN KEY)
  10. mysql 开启用户远程登录
  11. 图片转excel方法
  12. Windows平台安装flutter之初体验(安装教程)
  13. 洛谷——P1724 东风谷早苗
  14. windows操作系统32位与64位的含义
  15. 猫、路由器、带宽、IP地址、子网掩码、网关以及公网与私网简介
  16. 「需求分析」用户故事和用例是一回事吗?
  17. 激光电视好还是OLED电视好?两者各有什么优缺点
  18. iOS 自动订阅开发
  19. MiniGUI 体系结构之二
  20. 南大通用数据库-Gbase-8a-学习-14-LOAD加载数据

热门文章

  1. 如何在psql中切换数据库?
  2. 如何生成随机的字母数字字符串?
  3. idea 构建java 微服务_使用 IDEA 从 0 开始搭建 Spring Cloud 微服务
  4. 堡垒机应用发布服务器是干嘛的_支持Web UI数据库审计和敏感数据国密算法加密,JumpServer堡垒机v2.5.0发布丨Release Notes...
  5. php rewrite重写,yaf 自定义重写路由rewrite
  6. java biginteger string_String到BigInteger java
  7. python怎么发音乐到朋友圈_只要三步,用Python轻松制作短视频,你也能在朋友圈傲娇一把!...
  8. 《计算机小常识》一不小心把windows资源管理器给结束任务了,电脑黑屏了怎么办?
  9. ❤️《JUC并发编程从入门到高级》(建议收藏)❤️
  10. ElementUI自定义主题颜色