A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qiaojinhui 中级黑马   /  2013-6-6 18:04  /  2349 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

将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]);
                }

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

6 个回复

倒序浏览
使字符串能自动的根据获取的大小分配内存,减小了系统的内存压力,StringBuilder是一个类似于 String 的字符串缓冲区。可将字符串缓冲区安全地用于多个线程。所以比直接对String操作更有效率也更稳定。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
当字符串遇到频繁的增减时,因为字符串初始化就是不可变的,为了避免频繁的创建字符串对象,应考虑用一个容器进行去存储;
存储字符串容器:
1.StringBuffer(线程同步)2.StringBuilder(线程不同步,效率高点)
回复 使用道具 举报
是不是将int数组变成字符串都要创建缓冲区啊?
回复 使用道具 举报
007诸葛亮 发表于 2013-6-6 18:29
使字符串能自动的根据获取的大小分配内存,减小了系统的内存压力,StringBuilder是一个类似于 String 的字符 ...

不好意思啊 我记得是StringBuffere 是对线程安全的吧 StringBuilder不是线程安全的 所以  效率高 这个 线程安全和效率高不能兼得  
回复 使用道具 举报
其实 呢 是这样的  你要是不建立缓冲区  是不是这样做啊 String s ="";  if(xxxx)s +=nums[i]+SPACE else s+=num[i] 这样 你会在循环的时候 在赋值的右边 产生许多字符串常量 存储在常量池里面  这样 你的数据量越大  你所耗费的内存越大  因为  常量池的字符串常量是一旦被创建 就不能修改  所以 我们本来就是想要一种迭代存储的效果  不想浪费内存  希望每次累加的字符能在原来的基础上进行操作 所以 字符串常量无法做到 这样 就使用到了StringBuilder这个缓冲区  他是能够在原来的基础上改变里面的内容 而不会每次都开辟内存空间  节省了资源

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 漏分了。不好意思

查看全部评分

回复 使用道具 举报
楼主您好~帖子长时间未作出回答,我已经将您的帖子改成已解决。如果有问题的话可以私密我哦~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马