2016/4/27

Java:包裹(Wrapper)

本篇參考  http://openhome.cc/Gossip/Java/Wrapper.html

Java中的包裹器(Wrapper),其實就是類別型態?

目的是為了提升效率,將資料包裹成物件,因此物件可以攜帶更多資訊

Long、Integer、Double、Float、Boolean等類別是所謂的包裹器(Wrapper)

package cc.openhome;
public class IntegerDemo {
    public static void main(String[] args) {
        int data1 = 10;
        int data2 = 20;
        
        Integer wrapper1 = new Integer(data1);
        Integer wrapper2 = new Integer(data2);
        
        System.out.println(data1 / 3);
        System.out.println(wrapper1.doubleValue() / 3);
        System.out.println(wrapper1.compareTo(wrapper2));
    }
} 

基本包裹器都歸類於java.lang套件中,不用import,如使用Integer包裹整數可new出來,如果運算式都是int那結果也會是int

所以data1 / 3等於3

如用包裹器中的doubleValue()方法,可將包裹值以double型態做運算,所以wrapper1.doubleValue() / 3等於3.3333333333333335

而Integer還提供compareTo()方法,可與另一Integer物件做比較,相同回傳0,小於compareTo()包裹的值回傳-1,否則就1,== !=只能比較相等或不相等,compareTo()可傳回更多資訊



也有自動裝箱功能

Integer data1 = 10;  這就是直接裝箱,就不用像上面new了
Integer data2 = 20;
System.out.println(data1.doubleValue() / 3);
System.out.println(data1.compareTo(data2));

其他寫法or用法:

int number = 10;
Integer wrapper = number;

自動拆箱

int foo = wrapper;

再來 參考這篇 http://openhome.cc/Gossip/Java/AutoBoxUnBox.html

自動裝箱與拆箱內幕

這篇重點在最後

要比較兩個物件時,不要使用== !=,要用equals()

原因是物件它們參考的東西可能不一樣,所以用equals()比較物件比較好



沒有留言:

張貼留言