Optional data is everywhere. Databases almost always have a significant fraction of their fields as optional (that is, as possibly NULL). In addition, the forms submitted in web applications can contain absent parameters. All web applications must deal with such possibly-null data as part of normal processing.
For modeling optional data, wrapper classes such as Integer, Boolean, and so on, seem to have a significant advantage over primitives (int, boolean, and so on). This is because both NULL database fields and missing request parameters naturally map to null object references. With primitives, there is no such natural mapping.
For instance, how would you model a person's age as an optional number, with no reasonable default value, using an int? The only means is to use a magic value such as -1. This should likely be avoided, if possible.
JDK 1.5 introduced a language feature called autoboxing,
whereby primitives and wrappers are more or less interchangeable. However,
they are not entirely interchangeable, since wrapper objects can
be null, while primitives cannot.