Wrapper
Motivation
public class ThoughtSender() {
public native void send(Object o);
public static void main(String... args) {
ThoughtSender sender = new ThoughtSender();
sender.send("Sleep");
sender.send(new OutOfMemoryError());
sender.send(42);
}
Integer
public final class Integer extends Number implements ... {
private final int value;
public int intValue() {
return value;
}
public static Integer valueOf(int i) {
...
return new Integer(i);
}
Autoboxing
Integer wrapper = 3;
int primitive = wrapper;

Kein Upcasting!
byte -> short -> int -> long -> float -> double
char -^
double primitive = 3.14f; ✔️
Double wrapper = Float.valueOf(3.14f); 🚫
Long wrapper = 3; 🚫
caching/equals
Integer.valueOf(3) == Integer.valueOf(3) -> true
Integer.valueOf(128) == Integer.valueOf(128) -> false
Integer.valueOf(128).equals(Integer.valueOf(128)) -> true
für alle Wrapper in [-128, 127]
⟹ equals👍