精华内容
下载资源
问答
  • 你还在循环里面用+号拼接字符串吗? 前言 对于初学Java的人来说,在学习String的时候,肯定有无数个人和我们讲过,”尽量不要使用+拼接字符串,效率不好,应该使用append “,但真相真的是这样的吗?下面我们来...

    你还在循环里面用+号拼接字符串吗?

    前言

    对于初学Java的人来说,在学习String的时候,肯定有无数个人和我们讲过,”尽量不要使用+拼接字符串,效率不好,应该使用append “,但真相真的是这样的吗?下面我们来通过实际代码来测试一下+号与append的效率问题。

    代码分析

    public class Demo {

    public static void main(String[] args){

    String str = "";

    long start = System.currentTimeMillis();

    for(int i=0; i<100000; i++)

    str += "a";

    long end = System.currentTimeMillis();

    System.out.println(end - start);

     

    StringBuilder sb = new StringBuilder();

    start = System.currentTimeMillis();

    for(int i=0; i<100000; i++)

    sb.append("a");

    str = sb.toString();

    end = System.currentTimeMillis();

    System.out.println(end - start);

    }

    }

    我们分别在循环中分别用+好和append来循环拼接字符串。分别打印出他们的时间:

    编译,运行结果如下:

     

    我们可以发现效率确实差距非常的明显。别急,下面我们继续来通过javap命令来查看他的字节码文件指令:

    我们可以发现使用+号拼接字符串,在循环体立面每次都会new一个StringBuilder对象,然后调用append方法来追加字符串。

    下面我们看一下使用append拼接的字节码指令:

    综上我们可以发现,在循环体里面我们使用+号拼接字符串的时候,编译器每次都会给我们创建一个Stringbuilder对象,这也正是再循环体里面使用+号性能差的根本原因。难道这就可以说明我们永远都不要使用+号来拼接字符串了嘛?其实这是不完全正确的。下面我们再来一组测试:

    测试代码:

    public class Test {

    public static void main(String[] args){

    String a = "a";

    String b = "a";

    String c = "a";

    String d = "a";

    String e = a + b + c;

    e += d;

    }

    }

     

    我们可以通过javap命令来查看以上字节码文件的指令如下:我们会发现只帮助我们new了2个StringBuilder对象。我们可以得到如下结论:对于此处的str = str + “a”,编译器会处理为new StringBuilder().append(str).append(“a”),不管一次性+几个字符串,只要+拼接全部在一条语句中,就只会new一次,循环中+拼接被断成了十万条语句,那自然就会new十万次。

     

    总结

    我们在循环体中不要使用+号来拼接字符串,使用append来代替,但是不在循环体里面使用+号完全不会影响性能,甚至编译器还做了优化。对于此处的str = str + “a”,编译器会处理为new StringBuilder().append(str).append(“a”),不管一次性+几个字符串,只要+拼接全部在一条语句中,就只会new一次,循环中+拼接被断成了十万条语句,那自然就会new十万次。小伙伴们,你们GET了新技能没?

     

    展开全文
  • 你还在循环里面用+号拼接字符串吗?前言对于初学Java的人来说,在学习String的时候,肯定有无数个人和我们讲过,”尽量不要使用+拼接字符串,效率不好,应该使用append “,但真相真的是这样的吗?下面我们来通过...

    你还在循环里面用+号拼接字符串吗?

    前言

    对于初学Java的人来说,在学习String的时候,肯定有无数个人和我们讲过,”尽量不要使用+拼接字符串,效率不好,应该使用append “,但真相真的是这样的吗?下面我们来通过实际代码来测试一下+号与append的效率问题。

    代码分析

    public class Demo {

    public static void main(String[] args){

    String str = "";

    long start = System.currentTimeMillis();

    for(int i=0; i<100000; i++)

    str += "a";

    long end = System.currentTimeMillis();

    System.out.println(end - start);

    StringBuilder sb = new StringBuilder();

    start = System.currentTimeMillis();

    for(int i=0; i<100000; i++)

    sb.append("a");

    str = sb.toString();

    end = System.currentTimeMillis();

    System.out.println(end - start);

    }

    }

    我们分别在循环中分别用+好和append来循环拼接字符串。分别打印出他们的时间:

    编译,运行结果如下:

    9b8091e280a470edbc55ce81cc17f5fe.png

    我们可以发现效率确实差距非常的明显。别急,下面我们继续来通过javap命令来查看他的字节码文件指令:

    40545c72f3d2bf032d5f276e0531ac5a.png

    我们可以发现使用+号拼接字符串,在循环体立面每次都会new一个StringBuilder对象,然后调用append方法来追加字符串。

    下面我们看一下使用append拼接的字节码指令:

    6e52a79299f255015b02c2ebddc4df2a.png

    综上我们可以发现,在循环体里面我们使用+号拼接字符串的时候,编译器每次都会给我们创建一个Stringbuilder对象,这也正是再循环体里面使用+号性能差的根本原因。难道这就可以说明我们永远都不要使用+号来拼接字符串了嘛?其实这是不完全正确的。下面我们再来一组测试:

    测试代码:

    public class Test {

    public static void main(String[] args){

    String a = "a";

    String b = "a";

    String c = "a";

    String d = "a";

    String e = a + b + c;

    e += d;

    }

    }

    我们可以通过javap命令来查看以上字节码文件的指令如下:我们会发现只帮助我们new了2个StringBuilder对象。我们可以得到如下结论:对于此处的str = str + “a”,编译器会处理为new StringBuilder().append(str).append(“a”),不管一次性+几个字符串,只要+拼接全部在一条语句中,就只会new一次,循环中+拼接被断成了十万条语句,那自然就会new十万次。

    2b63094a49ee080e935df9fc63063552.png

    总结

    我们在循环体中不要使用+号来拼接字符串,使用append来代替,但是不在循环体里面使用+号完全不会影响性能,甚至编译器还做了优化。对于此处的str = str + “a”,编译器会处理为new StringBuilder().append(str).append(“a”),不管一次性+几个字符串,只要+拼接全部在一条语句中,就只会new一次,循环中+拼接被断成了十万条语句,那自然就会new十万次。小伙伴们,你们GET了新技能没?

    展开全文
  • JAVA拼接字符串用+号和append的区别

    千次阅读 2018-07-06 15:47:55
    之前没想过这个问题,比较low,一直用+号拼接字符串。那么加号拼接和用append方法拼接有啥区别呢?...其实实际上用+号拼接字符串的话,+号用的很少或者只用一个,并且不在循环里面用的话,也是可以的,没什么问...

    之前没想过这个问题,比较low,一直用+号拼接字符串。

    那么加号拼接和用append方法拼接有啥区别呢?

    +号拼接的原理是会在底层new一个StringBuilder,例如:str = str + “a”具体就是new  StringBuilder().append(str).append("a");

    其实实际上用+号拼接字符串的话,+号用的很少或者只用一个,并且不在循环里面用的话,也是可以的,没什么问题,不存在所谓的效率问题,但是+号不能用在 循环结构里面,如果在循环结构里面,那么每一次循环,+号都会new出来的新的StringBuilder对象,这样就很不好了,非常影响效率。

    因此,在拼接字符串的时候,我们尽量用append方法进行拼接,二是防止“高手们”无情的批评和指出错误,一是养成使用append方法的习惯,避免在循环内下意识的用+号进行拼接字符串处理。

    有篇文章讲的挺好的,我也是看了之后理解了不少才整理出来的这个。

    文章地址是:https://blog.csdn.net/m0_37589327/article/details/78605268

    感兴趣的小伙伴可以去看看

    展开全文
  • 拼接字符串代码段

    2014-12-28 19:47:00
    拼接字符串代码段 StringBuffer sb = new StringBuffer(); //java中for循环书写方式:for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体 //在infos里面进行循环 for(WeatherInfos info : infos) { ...

    拼接字符串代码段

    StringBuffer sb = new StringBuffer();

    //java中for循环书写方式:for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

    //在infos里面进行循环

    for(WeatherInfos info : infos)

    {

               String str = info.toString();

               sb.append(str);

               sb.append("\n");                                  

    }

                       tv.setText(sb.toString());

    转载于:https://www.cnblogs.com/baoxiaofei/p/4190348.html

    展开全文
  • 高效的JS 拼接字符串

    万次阅读 2012-10-26 15:21:29
    今天在JS里面碰到循环数组里面拼接字符串,可想而知那速率肯定不高,所以就上网不断的查询资料来提高拼接的效率,然而网上的拼接方法和java里面的还是不同 一下是网上的方法: function StringBuilder() { this.data=...
  • 用 + 来拼接,多简单的事呀这个应该算是最简单的一种方式了,但是很遗憾得玩告诉你,阿里巴巴在他们的规范里面之处不建议在 for 循环里面使用 “+” 进行字符串拼接。这里的不建议,其实就是不允许的意思,只是...
  • Java 字符串连接

    2015-08-31 19:25:41
    对于一次性初始化且后面不要修改的长字符串,直接用+操作符连接。这是很常用的场景,一般代码编辑器如...对于中间有变量,需要动态拼接字符串,特别在循环内部或者大量连接操作时,必须要用StringBuffer或者StringBuil
  • }这样的拼法,实际上从分析class的字节码来看,是在循环里面new StringBuffer对象,相当的耗。通过这样的分析,给新人解释,是最有效的了。还能提升一些了解java底层知识的兴趣。——《Java编程思想》第四版P284-286...
  • 最不用动脑筋的方法就是for循环里面用String/StringBuffer/StringBuilder等把string拼接起来 下面介绍稍微优雅一点的实现 详见我的博客 https://blog.terrynow.com/2021/01/10/java-repeat-a-string-n-times/ ...
  • JAVA随机数-日期-正则

    2020-08-19 21:43:27
    StringBurilder 作用:可改变的字符串 AbstractStringBuider里面的char数组没有用final修饰 ... //如果再循环拼接字符串 会产生大量的对象对内存的消耗十分的大 //在循环中完成字符串拼接不要使用String String st
  • java代码优化笔记

    2018-11-22 10:35:49
    在这篇文章里面介绍了为什么不能循环拼接字符串对象。 容器类初始化的时候指定长度 例如map和list,如果我们知道我们的数据量有多大,我们最好一开始的时候就指定长度,因为这些list和map在扩容的时候,会做一些例如...
  • el表达式的拼接

    2018-12-08 13:26:29
    有时经常填充数据到页面,想要用过变量循环获取值,可他不能进行字符串拼接,像"${obj"+i+"}",这种会报错,el表达式不能拼接也是太差劲了。而在jsp页面不想有太多java代码,可以用js的方法...
  • Pattern和Matcher类是java用来进行模式匹配的类,使用步骤为先建立一个Pattern对象,然后用正则表达式作参数得到Pattern的实例,然后再通过pattern.matcher()方法去得到匹配对象Matcher,最后通过一个while循环去...
  • 编程题: 编写代码实现某个数字的连续累加和(在键盘上...第二次循环,内循环i是2,执行两次字符串拼接结果就是22,第三次就是222最后转换为int,我这里是把功能单独放在方法里面 package 编程题; import java.util.
  • System.out.printf() 可插入带 % 的输入类型,前两种只可以插入转义符, 不能插入 % 的数据或字符串 在 printf 里面,输出有5个部分 %[argument_index$][flags][width][.precision]conversion 以“%”开头,[第几个...
  • 字符串拼写的几种方式 String重写equal()方法 JavaString深入理解 “+”号拼接 利用+进行拼接的时候,会将+号的拼接方式变换成StringBuilder的append方式,也就是说每次利用+会建立一个StringBuilder。因此,在循环...
  • 跑马灯效果

    2019-10-04 20:47:30
    4.把步骤2和步骤3拼接出来的新的字符串赋值给步骤1中定义的变量 5.调用“让程序暂停”的函数,让程序暂停1s,然后继续执行 6.输出这个变量 7.调用循环函数,把步骤1、2、3、4放到函数体里面 Java ...
  • 连接符(字符串)默认- 21 lazy 是否启用懒加载 Boolean false 效果动el-tree懒加载,不可和openAll或默认展开同时使用 22 lazyFn 懒加载的回调函数 Function - 当适用lazy时必须传入回调函数,示例:lazyFn='...
  • 为什么阿里巴巴不建议在for循环中使用"+"进行字符串拼接 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较? fastjson到底做错了什么?为什么会被频繁爆出漏洞? 大厂是如何设计接口的? 不要再在对外接口中...
  • 3.1.0 在函数内定义一个字符数组,用gets函数输入字符串的时候,如果输入越界,为什么程序会崩溃? 3.1.1 C++中引用与指针的区别 3.1.2 C/C++程序的内存分区 3.1.3 快速排序的思想、时间复杂度、实现以及优化方法...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

java循环里面拼接字符串

java 订阅