Java字符串常用的5种拼接方法

您所在的位置:网站首页 字符串有哪些常用方法和技巧呢 Java字符串常用的5种拼接方法

Java字符串常用的5种拼接方法

2024-06-29 09:04| 来源: 网络整理| 查看: 265

String += 加号拼接,以a=“a”; str = “a”+"b"为例,将字节码反编译,得到以下效果代码: String a = “a”; StringBuilder sb = new StringBuilder(); sb.append(a).append(“b”); String str = sb.toString(); JVM对于“+”处理过程: 首先创建一个String对象a,并把"a"赋值给a,然后在第2行中,JVM通过创建一个新的StringBuilder对象sb,并在第3行通过sb的append方法将字符串"a"和字符串"b"进行拼接,第4行sb调用toString方法转换成字符串,然后把结果赋给新的String对象str。 其中,String对象a并没有被修改(String对象一旦创建之后就不可更改),只是会被JVM的垃圾回收机制(GC)给回收掉。字符串拼接的结果是一个新的String对象str,new出了一个新的内存。而且拼接的过程,还new了一个新的StringBuilder对象,调用其toString()方法。 所以,在循环内部执行+=,每执行一次循环,都会创建一个新的String对象,一个StringBuilder对象,然后GC不断回收,所以时间、空间开销都很大。 当然,在编译阶段就能够确定的字符串常量,完全没有必要创建String或StringBuffer对象。直接使用字符串常量的"+"连接操作效率最高(如:String str = “a” + “b” + “c”)。此处 “a” , “b” ,“c”常量完全确定,不用通过循环之类的获取。 StringBuilder的apend

StringBuffer 和 StringBuilder 的append方法都继承自AbstractStringBuilder,整个逻辑都只做字符数组的加长,拷贝,不会创建新的String对象,但会创建新的字符数组:扩容数组属于一个新的数组,原来的数组成为垃圾对象并被GC回收。 StringBuilder源码(jdk1.8): public AbstractStringBuilder append(String str) { if (str == null) return appendNull(); int len =



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3