最近看网上一些代码优化的文章,发现自己确实有很多地方做的不够好,这里简单的列出我经常忽略的几条代码优化不够的地方(主要摘自http://www.cnblogs.com/xrq730/p/4865416.html):
1 可变长参数
public
void
testParams(String...
args
){
for
(
int
i
= 0;
i
<
args
.
length
;
i
++) {
System.
out
.println(
args
[
i
]);
}
}
可变参数是使用数组实现的,但是又可以不限制长度。每个函数最多有一个可变参数,且必须是最后一个参数。
所以如果知道长度,可以改为:
public
void
testParams(String[]
args
){
for
(
int
i
= 0;
i
<
args
.
length
;
i
++) {
System.
out
.println(
args
[
i
]);
}
}
2 加强的for循环实现原理
在开发中经常有链表进行for循环会出现空指针异常,原因在于其没有实现Iterator,for循环的原理是利用Iterator来实现的,
在编译的时候编译器会自动将对for这个关键字的使用转化为对目标的迭代器的使用,
所以为了避免出现空指针异常,尽量使用Iterator进行遍历
3 减少变量的重复计算
明确一个概念,对方法的调用,即使方法中只有一句语句,也是有消耗的,包括创建栈帧、调用方法时保护现场、调用方法完毕时恢复现场等。所以例如下面的操作:
for (int i = 0; i < list.size(); i++) {...}
建议替换为:
for (int i = 0, int length = list.size(); i < length; i++) {...}
这样,在list.size()很大的时候,就减少了很多的消耗
4 循环内不要不断创建对象引用
例如:
for (int i = 1; i <= count; i++)
{
Object obj = new Object();
}
这种做法会导致内存中有count份Object对象引用存在,count很大的话,就耗费内存了,建议为改为:
Object obj = null; for (int i = 0; i <= count; i++) { obj = new Object(); }
这样的话,内存中只有一份Object对象引用,每次new Object()的时候,Object对象引用指向不同的Object罢了,但是内存中只有一份,这样就大大节省了内存空间了。
5 字符串变量跟字符串常量equal方法时将常量写在前面
这是一个比较常见的小技巧了,如果有以下代码:
String str = "123"; if (str.equals("123")) { ... }
建议修改为:
String str = "123"; if ("123".equals(str)) { ... }
这么做主要是可以避免空指针异常