[改善Java代碼] 謹慎包裝類型的大小比較


建議27:謹慎包裝類型的大小比較

基本數據類型比較大小木有問題,不過其對應的包裝類型大小比較就需要注意了。看如下代碼:

 1 public class Client {
 2     public static void main(String[] args) {
 3         Integer a = new Integer(100);
 4         Integer b = new Integer(100);
 5         /* compareTo返回值:若a>b則返回1;若a==b則返回0;若a<b則返回-1 */
 6         int result = a.compareTo(b);
 7 
 8         System.out.println(a > b);
 9         System.out.println(a == b);
10         System.out.println(a > b);
11         System.out.println(result);
12     }
13 }

運行結果:

false
false
false
0

為什么(a==b)返回值會是false呢?

通過對比字符串比較來理解,基本類型100通過包裝類Integer包裝后生產一個Integer對象的引用a,
而“==”使用來判斷兩個操作數是否有相等關系。如果是基本類型就直接判斷其值是否相等。
若是對象就判斷是否是同一個對象的引用,顯然我們new了兩個不同的對象。
但注意:
對於"<",">" 只是用來判斷兩個基本類型的數值的大小關系。在進行(a<b)運算時,

實際上是根據其intValue方法的返回對應的數值來進行比較的。因此返回肯定是false.

知道問題原因,解決起來就容易了。兩種方法:
第一種: a.intValue()==b.intValue();
第二種: a.compareTo(b);//返回-1代碼(a<b),返回0代表(a==b),返回1代表(a>b)
第二種方法源碼如下:

1 public int compareTo(Integer object) {
2     int thisValue = value;
3     int thatValue = object.value;
4     return thisValue < thatValue ? -1 : (thisValue == thatValue ? 0 : 1);
5 }

由此可知,底層實現還是一樣的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM