Any time you create a type in C#, it automatically gets filled in with padded zeros. In the case of a class (reference type), this equates to a null pointer. So, technically, any time you're working with classes, the following are identical:
MyClass class;
MyClass class2 = null;
With value types (any struct, including int/float/double/etc), the type is passed with zeros, so the following are equivalent:
int i;
int j = 0;
However, in a method, the compiler checks to see if you've assigned a value to your types prior to using it. If you do the following, the compiler will complain:
int i;
Console.WriteLine{"{0}",i);
Technically, the above should be fine - but since it's a common source of programmer error, the compiler specifically checks for unassigned local variables, and complains. However, this is a compile-time complaint, and not a CLR issue. You can make IL that does the above, and it runs fine.