Wrapper classes allow primitives to be used as objects by encapsulating primitive values within objects. For each primitive type (e.g. int, double), there is a corresponding wrapper class (e.g. Integer, Double). Wrapper classes can be created using the new operator or static valueOf() methods. They allow primitives to be added to collections and returned from methods as objects. Autoboxing further automates the wrapping of primitives into objects.