BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #38943同步于 2015/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java字符串连续相加

dss886
2015/3/6镜像同步14 回复
我写了这么一串代码... IDE提示我可以优化 自动优化后替换成了一长串的String连续相加 我又看了一下报出这个Warning的Inspection的说明 按照这个说明,在这种情况下,String连续相加比StringBuilder的效率更高? String连续相加不是会更开销更大么?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
icyfox机器人#1 · 2015/3/6
英文的意思大概是:你的字符串连接的东西太少了,提高的效率有限,但是改成String就简洁了
kayla机器人#2 · 2015/3/6
我的理解是这样的: StringBuilder 和 StringBuffer 主要不是为了提升速度,而是为了节省空间,因为字符串拼接的话每个部分都会在常量区开辟空间。 但你这里拼接的字符串并不多,所以宁可费点空间来提升一下速度。 我一般是在循环里用 StringBuilder 和 StringBuffer,其余地方都是直接拼接。
taoch机器人#3 · 2015/3/7
我印象中怎么写都无所谓。。因为编译时候会自动做出优化。。 隔了一年多,记不清了。。。 【 在 dss886 (打击楼主) 的大作中提到: 】 : 我写了这么一串代码... : [upload=1][/upload] : IDE提示我可以优化 : ...................
dss886机器人#4 · 2015/3/7
soga,循环里才用builder 【 在 icyfox (【意涵团】熊爸|狐狸|SSH) 的大作中提到: 】 : 英文的意思大概是:你的字符串连接的东西太少了,提高的效率有限,但是改成String就简洁了
dss886机器人#5 · 2015/3/7
这样,,,我还以为直接相加在空间和时间上都比builder开销更大 【 在 kayla (MRRB) 的大作中提到: 】 : 我的理解是这样的: : StringBuilder 和 StringBuffer 主要不是为了提升速度,而是为了节省空间,因为字符串拼接的话每个部分都会在常量区开辟空间。 : 但你这里拼接的字符串并不多,所以宁可费点空间来提升一下速度。 : ...................
dss886机器人#6 · 2015/3/7
有一次在循环里用了直接相加,前后花了4、5秒。。 改成builder以后一秒不到,,从此就都用builder了。。 【 在 taoch (掏吃|淘气|桃子|tfs|thj) 的大作中提到: 】 : 我印象中怎么写都无所谓。。因为编译时候会自动做出优化。。 : 隔了一年多,记不清了。。。
taoch机器人#7 · 2015/3/7
循环时每次append的东西未知,编译器无法做优化。。 builder是好习惯 【 在 dss886 (打击楼主) 的大作中提到: 】 : 有一次在循环里用了直接相加,前后花了4、5秒。。 : 改成builder以后一秒不到,,从此就都用builder了。。
nuanyangyang机器人#8 · 2015/3/7
编译器允许将字符串连加优化成StringBuilder。但确实是StringBuilder效率高。
axpq110机器人#9 · 2015/3/7
String s = "a"; System.out.println(s + "b"); 这个代码生成class后javap -c可以看到相加的实现就是通过StringBuilder String s = ""; for (int i = 0; i < 10000; i++) { s += i; } 这样写很坑爹,因为每次循环都会new一个新的StringBuilder故而效率低下 StringBuilder builder = new StringBuilder(); for (int i = 0; i < 10000; i++) { builder.append(i); } 这样始终只有一个builder不用每次都new一个,所以效率高 在拼接较少不很影响效率的时候,用builder的提升微乎其微,出于可读性直接通过+就可以了