A reference type is stored as a reference (like a pointer) to an object instance. null means a reference that isn't pointing to an instance of an object.
A value type is stored as the value itself, without any references. It doesn't make sense to have a null value type, since by its definition it contains a value.
int is a value type and not a reference type, which means you cannot assign a null to a value type.
You can make a value type nullable in C# and Java (the syntax differs a bit though). The Nullable type has a HasValue flag that tells you whether there's no value (actually there is, but it's the default value of the value type).
Usage (C#):
int? NullableInt = null;
Console.WriteLine(NullableInt.Value);
The reason you encounter the error of use of unassigned local variable, is that local valuables aren't initialized by default. Class members are initalized by default for example. They have no value and are not equal to null.
According to this answer, Microsoft could have allowed uninitialized local variables. They simply chose not to, because it would have been a bug and not because it would prevent you from observing the garbage uninitialized state of the local.