返回信息流我写了这么一串代码...
IDE提示我可以优化
自动优化后替换成了一长串的String连续相加
我又看了一下报出这个Warning的Inspection的说明
按照这个说明,在这种情况下,String连续相加比StringBuilder的效率更高?
String连续相加不是会更开销更大么?
这是一条镜像帖。来源:北邮人论坛 / java / #38943同步于 2015/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
Java字符串连续相加
dss886
2015/3/6镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
我的理解是这样的:
StringBuilder 和 StringBuffer 主要不是为了提升速度,而是为了节省空间,因为字符串拼接的话每个部分都会在常量区开辟空间。
但你这里拼接的字符串并不多,所以宁可费点空间来提升一下速度。
我一般是在循环里用 StringBuilder 和 StringBuffer,其余地方都是直接拼接。
我印象中怎么写都无所谓。。因为编译时候会自动做出优化。。
隔了一年多,记不清了。。。
【 在 dss886 (打击楼主) 的大作中提到: 】
: 我写了这么一串代码...
: [upload=1][/upload]
: IDE提示我可以优化
: ...................
soga,循环里才用builder
【 在 icyfox (【意涵团】熊爸|狐狸|SSH) 的大作中提到: 】
: 英文的意思大概是:你的字符串连接的东西太少了,提高的效率有限,但是改成String就简洁了
这样,,,我还以为直接相加在空间和时间上都比builder开销更大
【 在 kayla (MRRB) 的大作中提到: 】
: 我的理解是这样的:
: StringBuilder 和 StringBuffer 主要不是为了提升速度,而是为了节省空间,因为字符串拼接的话每个部分都会在常量区开辟空间。
: 但你这里拼接的字符串并不多,所以宁可费点空间来提升一下速度。
: ...................
有一次在循环里用了直接相加,前后花了4、5秒。。
改成builder以后一秒不到,,从此就都用builder了。。
【 在 taoch (掏吃|淘气|桃子|tfs|thj) 的大作中提到: 】
: 我印象中怎么写都无所谓。。因为编译时候会自动做出优化。。
: 隔了一年多,记不清了。。。
循环时每次append的东西未知,编译器无法做优化。。
builder是好习惯
【 在 dss886 (打击楼主) 的大作中提到: 】
: 有一次在循环里用了直接相加,前后花了4、5秒。。
: 改成builder以后一秒不到,,从此就都用builder了。。
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的提升微乎其微,出于可读性直接通过+就可以了