Как List <T> .Contains () находит подходящие элементы?

У меня есть список автомобильных объектов

 List<Car> cars = GetMyListOfCars();

и я хочу увидеть, есть ли машина в списке

if (cars.Contains(myCar))
{
}

что содержит Содержит, чтобы выяснить, есть ли myCar в списке. Делает ли это "ToString ()" на моем объекте автомобиля. Использует ли он метод Equals (), gethashcode ()?

Я вижу, что могу передать свой собственный IEqualityComparer, чтобы заставить мою собственную реализацию, но просто хотел понять, что он делает по умолчанию.