What you're being tempted by has a name:
Yes it is very nice that unboxed int's can't be null. Testing for null is a pain. But so is testing for -1. For that matter, so is testing for the carry flag. Sorry but primitives aren't perfect representations either. They also require validation*. And since we're going to be doing validation anyway we might as well treat ourselves to the best model of our domain that we can.
That said, I dream of the day I can code in a language that will let me move such validation into the type system where they can become compiler errors. Until then I work with what we have.
* or strict parsing, or hell any method that lets me be confident an object is usable once it exists.