黑马程序员技术交流社区

标题: 将int数组变成字符串。 [打印本页]

作者: qiaojinhui    时间: 2013-6-6 18:04
标题: 将int数组变成字符串。
将int数组变成字符串。 创建缓冲区是为什么啊!private static String arrayToString(int[] nums) {
                //1,创建字符串缓冲区。
                StringBuilder sb = new StringBuilder();为什么?缓冲区的作用是什么啊?
                for (int i = 0; i < nums.length; i++) {
                        if(i!=nums.length-1)
                                sb.append(nums[i]+SPACE);
                        else
                                sb.append(nums[i]);
                }

作者: 007诸葛亮    时间: 2013-6-6 18:29
使字符串能自动的根据获取的大小分配内存,减小了系统的内存压力,StringBuilder是一个类似于 String 的字符串缓冲区。可将字符串缓冲区安全地用于多个线程。所以比直接对String操作更有效率也更稳定。
作者: msileandroid    时间: 2013-6-6 19:12
当字符串遇到频繁的增减时,因为字符串初始化就是不可变的,为了避免频繁的创建字符串对象,应考虑用一个容器进行去存储;
存储字符串容器:
1.StringBuffer(线程同步)2.StringBuilder(线程不同步,效率高点)
作者: qiaojinhui    时间: 2013-6-6 19:32
是不是将int数组变成字符串都要创建缓冲区啊?

作者: 张歆明    时间: 2013-6-6 23:02
007诸葛亮 发表于 2013-6-6 18:29
使字符串能自动的根据获取的大小分配内存,减小了系统的内存压力,StringBuilder是一个类似于 String 的字符 ...

不好意思啊 我记得是StringBuffere 是对线程安全的吧 StringBuilder不是线程安全的 所以  效率高 这个 线程安全和效率高不能兼得  
作者: 张歆明    时间: 2013-6-6 23:07
其实 呢 是这样的  你要是不建立缓冲区  是不是这样做啊 String s ="";  if(xxxx)s +=nums[i]+SPACE else s+=num[i] 这样 你会在循环的时候 在赋值的右边 产生许多字符串常量 存储在常量池里面  这样 你的数据量越大  你所耗费的内存越大  因为  常量池的字符串常量是一旦被创建 就不能修改  所以 我们本来就是想要一种迭代存储的效果  不想浪费内存  希望每次累加的字符能在原来的基础上进行操作 所以 字符串常量无法做到 这样 就使用到了StringBuilder这个缓冲区  他是能够在原来的基础上改变里面的内容 而不会每次都开辟内存空间  节省了资源
作者: 孙百鑫    时间: 2013-6-22 00:40
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2