第46條 for-each循環優先于傳統的for循環
無法使用for-each循環的情況:
1.過濾,需要周遊集合并删除標明的元素,需要顯式的疊代器,以便調用它的remove方法
2.轉換,需要周遊清單或者數組,并取代它部分或者全部元素值,需要清單疊代器或者數組索引,以便設定元素的值
3.平行疊代,并行地周遊多個集合,需要顯式地控制疊代器或者索引變量,以便所有疊代器和索引變量都可以得到同步前移
第47條 了解和使用類庫
第48條 如果需要精确的答案,請避免使用float和double
float和double類型主要是為了科學計算與工程計算而設計的,它們并沒有提供完全精确的結果,是以不應該被用于需要精确結果的場合。在商業計算中要用BigDecimal。
總結:對于需要精确答案的計算,不能使用float或者double,BigDecimal允許完全控制舍入,如果業務要求涉及多種舍入方式,使用BigDecimal很友善,如果性能很關鍵,涉及的數值不大,就可以使用int或者long,如果數值範圍沒有超過9位十進制數字,可以使用int,如果不超過18位數字,使用long,如果數值可能超過18位,就必須用BigDecimal。
public class Test {
public static void main(String[] args) {
double a = 1.29;
double b = 0.43;
System.out.println(a - b);
BigDecimal c = BigDecimal.valueOf(1.29);
BigDecimal d = BigDecimal.valueOf(0.43);
System.out.println(c.subtract(d));
}
}
第49條 基本類型優先于裝箱基本類型
基本類型和裝箱基本類型之間的三個主要差別:
1.基本類型隻有值,而裝箱基本類型具有與它們的值不同的同一性(兩個裝箱基本類型可以具有相同的值和不同的同一性)
2.基本類型隻有功能完備的值,而每個裝箱基本類型除了它對應的基本類型的所有功能值之外,還有個非功能值:null
3.基本類型通常比裝箱基本類型更節省空間和時間。
适合使用裝箱基本類型的地方:
1.作為集合中的元素,鍵和值。
2.在參數化類型中,必須使用裝箱基本類型作為類型參數。
3.在進行反射方法調用時,必須使用裝箱基本類型。
資料綁定的基本資料類型和包裝類型的差別是
基本資料類型是必須要傳值的,不傳值的話會報錯,而且傳值的話也必須是對應的基本資料類型,否則的話會報類型錯誤,而包裝類型可以傳空值,也可以用requestParam來限制傳值是否可以為空,是以一般對于可能會傳空值的屬性一般會用包裝類型。
public class Test {
public static void main(String[] args) {
User user = new User();
user.setName("Sam");
user.setAge(15);//Integer預設值為null
System.out.println(user);
User user1 = new User();
user1.setName("Tom");
user1.setScore(75);//int類型預設值為0
System.out.println(user1);
User user2 = new User();
user2.setName("David");
user2.setAge(null);//int類型值不能為null
user2.setScore(null);//Integer類型值可以為null
}
}
class User{
private String name;
private int age;
private Integer score;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public Integer getScore() { return score; }
public void setScore(Integer score) { this.score = score; }
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
第50條 如果其他類型更合适,則盡量避免使用字元串
字元串不适合代替其他值類型。
字元串不适合代替枚舉類型。
字元串不适合代替聚集類型。
String compundKey = className + "#" + i.next();//最好編寫一個類來描述這個資料集
字元串不适合代替能力表
String不能代替<T>