一、編碼優化
(一).對象與基本類型
1. clone() 方式創建對象的選擇
private static Person per = new Person();
public static Person getPerson() throws CloneNotSupportedException{
return (Person) per.clone();
}
注意:該方式是淺拷貝,類需要實現 Cloneable 接口,拷貝的新對象會包含一些原來對象的信息,當構造器中有複雜邏輯執行時,clone()方式創建對象才比new快(clone() 是對內存中數據塊的拷貝,沒有調用構造器)。
2.避免對boolean判斷
當表達式結果爲Boolean類型時,避免將表達式結果再與‘true’或‘false’進行比較。
if( str.endsWith("a")); //推薦
if(str.endsWith("a") == true ); //不推薦
3.靜態方法的選擇
如果不需要去訪問對象的外部,那麼就把方法聲明爲static的,如工具類中的方法。 靜態方法通過“類名.方法名”的方式調用,無須創建對象,不需要虛擬導向表,可以更快的調用。
4.多使用局部變量
局部變量的訪問速度遠高於成員變量
5.運算符的選擇
使用 || 代替 | ,使用 && 代替 & ,使用 >> 、<< 、>>> 代替部分算術運算
6.數據維數的選擇
二維數組的訪問速度優於一維數組,但二維數組比一維數組要佔用更多的內存。
7.表達式優化
int a1,a2,a3;
//方式1
int b1 = a1*a2*a3*13;
int b2 = a1*a2*a3*17;
int b3 = a1*a2*a3*19;
//優化方式
int c0 = a1*a2*a3;
int b1 = c0*13;
int b2 = c0*17;
int b3 = c0*19;
8.避免重複初始化變量
java會把變量初始化爲一個確定的值,對象爲null,整數類型爲0,浮點類型爲0.0,布爾類型爲false,
9.數值字面量的改進
int a = 0b10; //二進制,數字前加"0b"或"0B"
System.out.println(a); //2
int b = 017; //八進制,數字前加"0"
System.out.println(b); //15
int c = 0x15; //十六進制,數字前加"0x"或"0X"
System.out.println(c); //21
int d = 50_000_000; //加"_"增加可讀性,相當於50,000,000
System.out.println(d); //50000000
10.賦空變量
賦空變量是指將null值顯示的賦給變量。這樣使該變量的引用失去作用域,不再有對該變量的引用,它就可以被當做垃圾收集了。(對於局部變量,當方法執行完畢,局部變量就失去了作用域,棧就會刪除對該變量的引用)