What is the difference between == and .Equals() in C#?
Answer
== is an operator. For value types, it compares values (structural equality). For reference types, by default it compares references (identity — same object in memory), but can be overloaded. For string, == compares content (string interning + operator overload). .Equals() is a virtual method from System.Object. Value types override it for structural comparison. Reference types by default: reference equality (same as ==). Can be overridden to provide content comparison. Key scenarios: new string("hi") == new string("hi") → true (string overloads ==). new object() == new object() → false (different references). object.ReferenceEquals(a, b): always reference equality, no override. For collections, use SequenceEqual(). Override both == and Equals() consistently, and also override GetHashCode() when overriding Equals().