Sometimes one want to compare value equality, other times reference equality. These method provide options to do both under various circumstances. By default reference types are compared by reference for both methods, while ReferenceEquals only compares references for any type. A class can override the Equals instance method to provide value equality.