java 板


LINE

※ 引述《cyclone350 (老子我最神)》之铭言: : : 推 AI3767:那篇在回圈内+=, 不是一次性加起来, 确实很高可能造成变慢 04/01 23:46 : : → cha122977:可以请教为何 str+=str; 会重复宣告吗?不太明白 04/01 23:56 : 大概看懂版主跟那篇文章是啥意思了,我用白话一点 (有务请修正) : 如果你的程式码长这样 : String str = ''; : while(i < 100000) { : str += 'a'; : } : jdk 会把回圈解释成像这样 : while(i < 100000) { : str = new StringBuilder(str).append('a'); : } : 但是如果你自己用 StringBuilder 的话会是这样用 : StringBuilder str = new StringBuilder(); : while(i < 100000) { : str.append('a'); : } : 所以差在的时间应该很明显在哪边 !! : 虽然 + 号会被解释成 append,但是他不是万用的 : 在某些情况仍需要自行使用 StringBuilder 来提升效能 : 这应该就是那边文章的结论 !? 这一串讨论看来有些紊乱。 我本来以为多数的人都已经知道在回圈内使用 operator + 来串接字串做累加的 恐怖(在时间与空间上)与原因,毕竟 JWorld@TW 上这一篇文章已挂了好多年了。 http://www.javaworld.com.tw/jute/post/view?bid=29&id=15160&sty=1&tpg=3&age=-1 在程式码中一个以 operator + 串接多个 sub-expression 的 expression 在编译 其会被编译器换成 StringBuffer(for Java 1.5-)/StringBuilder(for Java 1.5+) 的多个操作(若是各 sub-expression 都是编译期常数,则整个 expression 由 编译器替换成一个常数)。 通常临时要把多个数值组合成一个字串时,直接用 operator + 串起来是无大碍。 但偏偏许多初心者很喜欢用在回圈里使用 operator + 来集成一个最後的结果字串, 如同你文中的第一个例子。 这种做法恐怖在对空间与时间上的浪费,把 StringBuffer/StringBuilder 比喻成 笔记簿,这样子的行为就如同一个人在学期初买了一张纸当笔记簿。 上了一堂课後,发现他的笔记簿已经用完,於是他又去买了两张纸当作新 笔记簿,还记得先把前一本笔记簿(一张纸)的内容抄写过来。 上了第二堂课,又发现笔记簿用完了,於是再去买三张纸成为新笔记簿,也记得 把前一本笔记簿(两张纸)的内容抄写到新笔记簿里。 上了第三堂课,又发现笔记簿用完了,於是再去买四张纸成为新笔记簿,也记得 把前一本笔记簿(三张纸)的内容抄写到新笔记簿里。 ... ... ... 到了学期末最後一堂,他发现他获得了一本厚达 1000 张的完美笔记,以及... 他曾有过的笔记簿群共 499500 张纸,记不清他用掉多少笔在抄写上,与多少劳力 与时间在重复抄写上。 [傻瓜第四部曲.完] --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 1.172.187.57
1F:推 NewSpec:这篇正解 经常可以看到有文章在强调这个antipattern 04/02 01:57
2F:→ cha122977:谢谢 我是知道一些守则 但对这些守则的由来不是全盘了解 04/02 03:37
3F:→ swpoker:老实说~除非是有大量处理字串的问题~ 04/02 08:58
4F:→ swpoker:例如SQL字串这种需要道stringbuilder? 04/02 09:14
5F:推 PsMonkey:以前没探究原因,只是单纯记得不要用 + 号 [遮脸] 04/02 11:33
6F:推 BBBroflovski:还好平时有在逛java版 有逛有保佑XD 04/03 02:00







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP