You can cast anything to the type Object, and back again. This is frequently used when a method takes parameters that can be any data type. For instance the String.Format method: string s = string.Format("{0}{1}{2}", "The answer is ", 42, "."); What really happens here is that the method takes an array of objects: object[] temp = new object[] {(object)"The answer is ", (object)42, (object)"."}; string s = string.Format("{0}{1}{2}", temp); The strings already are objects, so they can be casted without boxing. For the integer value, though, a new object is created on the heap and the value is copied into the object. --- b { font-weight: normal; }