What this seems to be saying is that if the primitive Object value is the null value for its own type -- like NULL_BIGINT for Long, NULL_INTEGER for Integer, etc. we skip type checking and replace the value with the correct null for the expected type. So, null just means null, no matter the type you chose to represent it. I find this surprising, but maybe it's OK.