If you give free reign for anyone to set the values independently, yes.
that is, in fact, exactly what the API currently does.
Value setters currently ensure that the default value (0 for numerics) is set if exists == false.
if we're going to have that expectation on the callers it should be documented and there should be some asserts in the code to ensure it.
Updated patch with yonik's suggested fix + some class level docs explaining the requirements on the callers + some assertions in key methods that it's pre-conditions aren't violated.
If folks think this is a better way to go then accounting for the possibility that "value!=0" when "exists==false" in hashCode/equals/compareTo i'm fine with that – but we still need to audit the other impls & add tests for them as well.