永发信息网

在Java里,string 和bufferstring 有什么区别啊?

答案:3  悬赏:70  手机版
解决时间 2021-11-23 21:12
在Java里,string 和bufferstring 有什么区别啊?
最佳答案
String类用来表示那些创建后就不会再改变的字符串,它是immutable的。
StringBuffer类用来表示内容可变的字符串,并提供了修改底层字符串的方法。
当我们进行字符拼接时,请使用StringBuffer类而非String类,因为前者将比后者快上百倍。
的确,在程序的太多场合我们都会进行字符串拼接工作,简单的代码示例如下:
String str="You are nice.";
str+="I love you so much.";
如果用StringBuffer类的话,代码如下:
StringBuffer str= new StringBuffer("You are nice.");
str.append("I love you so much.");
从表面看来String类只用一个加号(+)便完成了字符串的拼接,而StringBuffer类却要调用一个append()方法,是否实现起来更简洁,更单纯呢?其实不然,让我们了解一下程序运行内部发生了哪些事情:
经编译后程序的bytecode(字节码)展示出了实质: 在用String类对象直接拼接时,JVM会创建一个临时的StringBuffer类对象,并调用其append()方法完成字符串的拼接,这是因为 String类是不可变的,拼接操作不得不使用StringBuffer类(并且--JVM会将"You are nice."和"I love you so much."创建为两个新的String对象)。之后,再将这个临时StringBuffer对象转型为一个String,代价不菲!可见,在这一个简单的一次拼接过程中,我们让程序创建了四个对象:两个待拼接的String,一个临时StringBuffer,和最后将StringBuffer转型成为的String--它当然不是最初的str了,这个引用的名称没变,但它指向了新的String对象。
而如果直接使用StringBuffer类,程序将只产生两个对象:最初的StringBuffer和拼接时的String("I love you so much."),也不再需要创建临时的StringBuffer类对象而后还得将其转换回String对象。
可以想象,当我们的字符串要被循环拼接若干段时,用String类直接操作会带来多少额外的系统开销,生成多少无用的临时StringBuffer对象,并处理多少次无谓的强制类型转换哪。
全部回答
String的长度是不可变的,stringbuffer的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
以公司的名义签合同把工程款打个人账户上可以
微分干涉差显微镜的来历,简介
青香树移栽
佳能相机快门0.6 是多少
冷库3匹机一次需要加多少制冷
天天酷跑,为了神气牛牛买贵族三值得吗?三有
在太原哪里修电脑
男士必学:如何挑选合身的西装
自动烹饪锅好不好,优点,缺点
华为性能最好的是哪一款?
深闺 冷胭 txt下载
篮球里面的锋是什么意思,比如什么中锋啊,前
以″问号到感叹号为主题写一篇500字以上的作
一个男生说跟我相处很轻松,不用想太多,不用
华联购物中心(百合新城店)地址在什么地方,我
推荐资讯
宁夏汽车票查询官网
好疼,好累,好难过
孩子的事,什么时候能让我省省心?
NCBI上蛋白序列的是从n端到c端吗?
两百欧元,能买到什么东西?
为什么要经常修剪指甲?
寮步横坑百业五金电子城九街a3公交经过吗
《目送》中:其实不是鞋,是布。布,剪成脚的
7+1=( )(打一字)
余姚住房公积金最高贷款额度是多少
为什么要凌乱美?
全峰快递(洪湖总站)地址在什么地方,想过去办
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?