1.把字符串常量放在前面
通常把字符串常量放在比较函数equals()比较项的左侧来防止偶然的NullPointerException.
//Bad
if(s1.equals("liner")){.........}
//Good
if("liner".equals(s1)){..........}
这样毫无疑问的,把一种表达方式转换成另一种更好的表达方式,并不会失去什么。只要我们的Options是真实存在的(java8中optional是对可以为空的对象进行封装的)。
2.不要相信早期的JDK APIs
String[] files=files.list
if(files!=null){
for(int i=0;i<files.length;i++){
..............
}
}
"如果抽象路径名表示的不是一个目录,那么这个方法返回null.否则返回一个字符串数组,其中每个字符串表示当前目录下的一个文件或目录"
这样,最好加上判空检查,以确保正确性.
if(file.isDirectory){
String[] files=list.files;
if(files!=null){
for(int i=0;i<files.length;i++){
......
}
}
}
3.不要相信-1
javadoc中关于String.indexof()的早期描述是这样的:
“字符在字符序列中第一次出现的位置将作为结果[被返回]”,如果字符不存在则返回-1.
所以-1就可以理所当然被拿来用
//Bad
if(String.indexof(character)!=-1){............}
//Good
if(Strin.indexof(charactor)>=0){..............}
4.避免意外的赋值
(假设这是javascript)
//oops
if(variable=5){...........}
//Better(beacause causes an error)
if(5=variable){............}
//Intent(remeber. Javascript:===)
if(5===variable){...........}
如果你的表达式中有常量,将它放在等式左边。这样当你打算在添加一个=时,不容易出错
5.检查null和长度
不管什么时候你有一个集合、数组或其他的,确保它存在且不为空
//Bad
if(array.length>0){..............}
//Good
if(array!=null&&array.length>0){.............}