append("A").append("B").append("C")和append("ABC")

来源:互联网 发布:蓝牙共享网络给电脑 编辑:程序博客网 时间:2024/05/22 09:00

接上文,已知Sting s = "ABC";和String s ="A" + "B" + "C";无任何区别,并且后者可以自由定义格式自由换行缩进等而不影响效率,那么append("A").append("B").append("C")和append("ABC")有没有区别呢?

 

 

想想都知道,后者效率要高一点。众所周知的问题,比如用for遍历一个List,for(int i = 0;i<list.size();i++),for循环连个;之间的部分list.size()每次都会调用,list.size()放在第一个;前,只在初始化时调用一次会比较好,因为在遍历过程中size()是不会变的,所有重复调用没意义而调用方法也是有代价的,我们能不做的就尽量不去做。同样,append的问题,调用一次要好于3次,同样一段代码执行1次判断参数是否为null、是否要扩容等等、只执行一次显然好于3次。于是推荐append("ABC")而不是append("A").append("B").append("C");。

但也有例外,如上文说的拼接sql,如果sql需要order by groupby 等,append(orderby)换行

append(group by )与append(orderby group by )相比,虽然理论上有一点点的性能损耗,但是可读性强了很多order by 一行group by 又占一行,与sql相比,多调用一次append的损耗不值一提。

 

 

这是个很常见的重复调用的问题。

 

刚才那个for遍历list把list.size()放2个;中间就是十分常见的毫无意义的重复调用。

类似还有很多。举几个例子。

 



 

这些代码,有的是毫无意义,只是让代码更啰嗦难以阅读难以维护,并且浪费空间,有的则会导致bug。第6个是很常见的如果xx则截部分字符串的问题,contains是调了indexOf,不如直接用indexOf然后判断返回值然后把返回值作为索引。这样只做一次而不是同样的事情做两次。其他的例子完全可以alt + shift + l快捷键。想再好点的话,1 、2这种完全可以把挨个匹配改为二分搜索。

 

相同的代码出现第二次的时候就应该考虑复用了,对于1 、 2这种代码,实在看得我难受。他们连迭代器都没用过吗,如果用过的话,肯定会知道这种重复代码一般情况下没问题,但在迭代器里这么用就是有bug的呀,从而就不会这么写了,或者了解过eclipse快捷键,也不会这么写了,直接一个快捷键完事。或者想过去重构一下,也不会出现这种代码了。

貌似写代码就是实现功能就行,其他的全都没去思考过......

 

还有上面举的那个例子,用for遍历List,好多代码也看得让人无语。光for、foreach 、迭代器、这3种遍历方式,而List,分两种构成方式,数组和链表,这就可以组成6种遍历方式,不去研究一下的话,你怎么知道哪种情况最好,既然有这么多选择你就没想过为什么要提供这么多选择吗。而看他们则用得完全看自己心情或喜好......更有甚者,连foreach是什么都不知道......说是“变体的for循环”......


0 0
原创粉丝点击