First, note that this only applies to fields, not local variables - they cannot be read until they are assigned, at least in C #. In fact, the CLR initializes the stack frames to 0 if you have the appropriate set of flags, which, in my opinion, is the default. This is rarely seen, but you need to go through bulky hacks.
The default value of int is 0 - and for any type, it is essentially a value represented by a bit pattern full of zeros. For a value type, this is the equivalent of calling a constructor without parameters, and for a reference type, null.
Basically the CLR erases memory with zeros.
It is also the value given by default(SomeType) for any type.
Jon skeet
source share