effective java——12考慮實現coparable介面
阿新 • • 發佈:2018-12-14
float和double型別的主要設計目標是為了科學計算和工程計算。他們執行二進位制浮點運算,這是為了在廣域數值範圍上提供較為精確的快速近似計算而精心設計的。然而,它們沒有提供完全精確的結果,所以不應該被用於要求精確結果的場合。但是,商業計算往往要求結果精確,這時候BigDecimal就派上大用場啦。
package com.jqf.www; import java.math.BigDecimal; public class test3 { public static void main(String[] args) { System.out.println(0.2+0.1);//s輸出結果有誤 false BigDecimal a=new BigDecimal("0.2"); BigDecimal b=new BigDecimal("0.1"); System.out.println(a.add(b));//true float d=(float) 0.1; float c=(float) 0.2; System.out.println(d+c);//true int dd=1;int tt=2; System.out.println(tt+dd);//true double d2=0.2; double d3=0.1; System.out.println(d2+d3 );//false } }
於Comparable介面其中只有一個方法——compareTo。此方法和equals有類似之處,不過它所表達的含義相比equals要更多。equals通常是比較兩個值是否相等,相等返回true,不相等返回false。compareTo則約定為第1物件若“大於”第2個物件則返回整數,“等於”則返回0,“小於”則返回負數,compareTo能約定更為複雜的“比較”,例如比較兩個字串進行字典序的比較,str = “abc”, str2 = “abd”,str.equals(str2)返回false,而str.compareTo(str2)則返回正數。compareTo與equals一樣同樣需要遵守自反性、對稱性、傳遞性。同樣有一個強烈的建議就是compareTo應該返回和equals方法相同的結果,但如果不一致,也不是不可以,就是最好能在註釋中寫明兩個方法返回的結果不同。
public class WorldList { public static void main(String[] args) { Set<String> s=new TreeSet<String>(); s.add("b"); s.add("a"); Collections.addAll(s,args); System.out.println(s);//[a, b] } }
public class compareTest { public static void main(String[] args) { Integer a=1; Integer b=2; System.out.println(a.compareTo(b)); } }