Do all objects have a default value?
Absolutely not. For example, the string "abc" is an object, but it does not have a "default value". The number 12 is an object, but it does not have a "default value".
However, all types have a default value. Remember, objects are instances of types; objects exist at runtime. Types are a compile-time concept. Do not confuse types with objects; they are as different as the string "The New York Times" and an actual copy of today's New York Times.
Values that may be stored in a variable of reference type are either references to objects or null. Hence the name "reference type": a value of a variable of reference type is a reference (or null).
Values that may be stored in a variable of value type are objects that are the values of that type. Hence the name "value type" - the value of a variable of value type is a value.
(I omit pointer types from the discussion; for our purposes, assume that all pointer types are logically the same as the value type IntPtr.)
The default value of any reference type is the null reference value.
The default value of any numeric value type - int, decimal, and so on - is the zero of that type. (Types that support multiple representations of zero, like float, choose the positive zero.) The default value of bool is false. The default value of any nullable value type is the null value of that value type.
The default value of any other value type is recursively defined as the value of that type formed by setting all of the fields of the type to their default values.
Is that clear?