今天學 Autoboxing and Unboxing
String[] strArr = new String[10];
int[] intArray = new int[10];ArrayList<String> strArrayList = new ArrayList();
strArrayList.add("Something");
簡單的展示 array 跟 arraylist
ArrayList<int> intArrayList = new ArrayList();
但是如果用 arraylist 放入 int 就會報錯
Type argument cannot be of primitive type
因為只能放 class 而不能放 primitive
class IntClass{
private int myValue; public IntClass(int myValue) {
this.myValue = myValue;
} public int getMyValue() {
return myValue;
} public void setMyValue(int myValue) {
this.myValue = myValue;
}
}
創立了一個簡單的 class IntClass
ArrayList<IntClass> intArrayList = new ArrayList();
intArrayList.add(new IntClass(56));
現在放入 IntClass 就不會報錯了
疑,那 String 是class 嗎?
是的,在 intellij 用 ctrl + 左鍵 點 String 進去就可以看到
public final class String
但只是要放個 int 若都要這樣搞就很麻煩
Interger 是 class
int 則是 primitive
ArrayList<Integer> intArrayLists = new ArrayList<Integer>();
for (int i = 0; i < 10; i++) {
intArrayLists.add(Integer.valueOf(i));
}
Integer.valueOf(i)
這就是 Autoboxing
把 int 轉成 Interger
不然 ArrayList<Integer>
for i 的 i 是 int 是放不進去 Integer 的
for (int i = 0; i < 10; i++) {
System.out.println(i + " --> " + intArrayLists.get(i).intValue());
}
intArrayLists.get(i).intValue()
這就是 Unboxing
把 Interger 轉回 int
Integer intValue1 = 54;
Integer intValue = new Integer(54);
Double doubleValue1 = 12.12;
Double doubleValue = new Double(12.12);
這裡展示了 Java 自動幫你處理的部份
intValue1 就是 intValue 的縮寫
doubleValue1 就是 doubleValue 的縮寫
Integer intValue0 = new Integer(55);
Integer intValue1 = 55;
int intValue2 = 55;
int intValue3 = intValue1.intValue();
所以這四行是一樣的功能, Java 幫我們處理複雜的部份
ArrayList<Double> myDoubleValues = new ArrayList<Double>();for (double dbl = 0.0; dbl <= 5.0; dbl += 0.5) {
myDoubleValues.add(dbl);
}for (int i = 0; i < myDoubleValues.size(); i++) {
double value = myDoubleValues.get(i).doubleValue();
System.out.println(i + " --> " + value);
}
輸出:
0 → 0.0
1 → 0.5
2 → 1.0
3 → 1.5
4 → 2.0
5 → 2.5
6 → 3.0
7 → 3.5
8 → 4.0
9 → 4.5
10 → 5.0