Challenge 1: A List<Integer> Declared via the Interface — Possible Solution ==================================================================== ListDemo.java: import java.util.ArrayList; import java.util.List; public class ListDemo { public static void main(String[] args) { List numbers = new ArrayList<>(); numbers.add(10); numbers.add(20); numbers.add(30); numbers.add(40); numbers.add(50); for (int n : numbers) { // Each call to numbers.add(10) autoboxes the primitive int // literal 10 into an Integer object before it's stored -- // List can only hold objects, never a raw int. Then, in // this for-each loop, each Integer is auto-UNBOXED back // into a primitive int to be assigned to the loop variable // n, since n is declared as a primitive int here, not // Integer. System.out.println(n); } } } Output: 10 20 30 40 50 WHY THIS WORKS AS AN ANSWER ------------------------------ The variable is declared as List, the interface, while ArrayList<> supplies the actual implementation, matching the chapter's own "declare with the interface" guidance, and the comment correctly identifies both the autoboxing (on add) and auto-unboxing (in the for-each) points, tying back to java1-2's boxing material.