Compiler sugar是指編譯器讓你在寫code的時候
可以少寫一些動作而自動幫你補完的行為

Auto boxing
Compiler讓Wrapper class的值可以直接用Primitive type給值

Integer x = 1;
原本應該是
Integer x = Integer.valueof(1);
但是compiler會幫你處理完畢
所以可以用直最上面的方法直接寫

Auto unboxing
Compiler讓WPrimitive type的值可以直接用Wrapper class給值

Integer x = 1;
int y = x;
原本應該是
int y = x.intValue();
但是compiler會幫你處理完畢
所以可以用直最上面的方法直接寫

要注意錯誤的用法
Integer i = null;
int j = i;
會跑出java.lang.NullPointerException

在比較方面
Integer x = 10;
Integer y = 10;
if(x == y) System.out.println("true");
else System.out.println("false");
結果會是true


Integer x = 1000;
Integer y = 1000;
if(x == y) System.out.println("true");
else System.out.println("false");
結果會是false

Integer在比較時會使用valueOf的method
這牽扯到Java的IntegerCache是-128~127
原始碼如下
public static Integer valueOf(int i) {
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
因為超過Cache時就會new一個新的, 所以第二個範例會不相等
通常物件的比較建議是用equals比較好

最後推薦JavaSE8技術手冊
4-12 ~ 4-17頁
相信會比我解釋的更清楚
http://www.books.com.tw/products/0010640845

 

1. 官網https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

01.png

 

2. Primitive 與 Wrapper class

02.png  

arrow
arrow

    RX1226 發表在 痞客邦 留言(0) 人氣()