1.用if+return代替複雜的if...else(if+return)
public static void test1(String str) {
if ("1".equals(str)) {
System.out.println("輸入的參數是1");
return;
}
if ("2".equals(str)) {
System.out.println("輸入的參數是2");
return;
}
if ("3".equals(str)) {
System.out.println("輸入的參數是3");
return;
}
System.out.println("你輸入的不是123`````````");
// ...這裡可以寫不滿足上述條件的處理
}
2.儘量減少對變量的重複計算(for循環的用法)
明確一個概念,對方法的調用,即使方法中只有一句語句,也是有消耗的,包括創建棧幀、調用方法時保護現場、調用方法完畢時恢復現場等。所以例如下面的操作:
for (int i = 0; i < list.size(); i++)
{...}
建議替換為:
for (int i = 0, int length = list.size(); i < length; i++)
{...}
這樣,在list.size()很大的時候,就減少了很多的消耗
補充:
用第一種方法時進行非空驗證:
for (int i = 0; list!=null && i < list.size(); i++)
{...}
3.循環內不要不斷創建對象引用
例如:
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罷了,但是內存中只有一份,這樣就大大節省了內存空間了。
4、儘量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用Hashtable、Vector、StringBuffer,後三者由於使用同步機制而導致了性能開銷
5.字符串變量和字符串常量equals的時候將字符串常量寫在前面
String str = "123";
if (str!=null && "123".equals(str))
{
...
}
這麼做主要是可以避免空指針異常
6.任何數據在使用之前進行非空判斷(包括對象,list)
ListemployeeInExams = exam.getEmployeeInExams();
ListemployeeOutExams = exam.getEmployeeOutExams();
boolean insertEmployeeResult = false;
int in_size, out_size;
in_size = employeeInExams != null ? employeeInExams.size() : 0;
out_size = employeeOutExams != null ? employeeOutExams.size() : 0;
Integer employeeNum = in_size + out_size;
7.if...else...語句用條件運算符
return examMapper.deleteByPrimaryKey(id) > 0 ? true : false;
result = examService.deleteExamById(examId) ? "刪除成功!" : "刪除失敗!";
8.善於使用commons-io包和commons-lang包中的工具類
io包中FilenameUtils和IOUtils和FileUtils的使用
lang包中 StringUtils和NumberUtils的使用等。
9.線程休眠的另一種方法
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
閱讀更多 程序員界的彭于晏 的文章