Java's decision to privilege "primitive" types was a failure of imagination. They decided they didn't want operator overloading but didn't make any way to replace it.
They should retrofit it as follows:
interface Addable<T> {
T add(T other);
}
And then make the + apply to any Addable, which can be defined for the boxed primitives. And so on for the other operators.