autoboxing: primitive ⇒ wrapper → Integer w = 100;
unboxing: primitive ⇐ wrapper → int p = new Integer(100);
Double d1 = 50; // doesn't compile Double d2 = new Double(50); double d3 = 50; Double d4 = 50.; List<Double> weights = new ArrayList<>(); weights.add(50.5); // [50.5] weights.add(new Double(60)); // [50.5, 60.0] weights.remove(50.5); // [60.0] double first = weights.get(0); // 60.0 - this is unbox. List<Integer> heights = new ArrayList<>(); heights.add(null); int h = heights.get(0); // NullPointerException
Integer
‘ə autoboxing’lə bağlı suallara diqqətlə baxmaq lazımdır. Aşağıdakı nümunə çaşdırıcıdır.
List<Integer> numbers = new ArrayList<>(); numbers.add(1); numbers.add(2); numbers.remove(1); System.out.println(numbers); // [1]
remove()
metodu burada 1
dəyərini deyil, 1-ci indeksdə olan dəyəri silir, yəni 2
-ni. Əgər 1
dəyərinin silinməsini istəyiriksə, o zaman parametr olaraq int
deyil, obyekt tipli dəyişən göndərməliyik, yəni:
numbers.remove(new Integer(1));
Aşağıdakı nümunə compile xətası vermir, amma runtime vaxtı exception fırladır:
int j = new Integer(null); // throws NumberFormatException
[topics lang=az]