Autoboxing is Java's automatic conversion from a primitive to its wrapper. Unboxing is the reverse:
ArrayList<Integer> nums = new ArrayList<>();
nums.add(42); // autoboxing: int -> Integer
int x = nums.get(0); // unboxing: Integer -> int
You do not write nums.add(Integer.valueOf(42)) or int x = nums.get(0).intValue(). The compiler inserts those calls for you.
Autoboxing makes code cleaner, but it is not free. Each boxing operation creates a new object on the heap. In a tight loop that boxes thousands of values, this can slow your program down and increase memory use. If performance matters and you are storing large amounts of numeric data, a plain int[] array avoids that overhead entirely.