Como a lista <T> .Contains () encontra itens correspondentes?

Tenho uma lista de objetos de carro

 List<Car> cars = GetMyListOfCars();

e eu quero ver se um carro está na lista

if (cars.Contains(myCar))
{
}

o que contém Contém para descobrir se o myCar está na lista. Faz um "ToString ()" no objeto do meu carro. Ele usa o método Equals (), o gethashcode ()?

Vejo que posso passar meu próprio IEqualityComparer para forçar minha própria implementação, mas só queria entender o que ele faz por padrã

questionAnswers(6)

yourAnswerToTheQuestion