Skip to main content

What is the difference between == and ===?

· 2 min read
Ace the iOS Interview
Aryaman Sharda
Sources & Resources

Main Source: đź”— Ace the iOS Interview

Additional Sources:

Further Reading:

TL/DR

In the example below, we have a simpleEngineclassthat implements the Equatable protocol. This allows us to provide a custom implementation for the == operator.

We say that two Engines are equal if the horsepower is the same. So, as long as the Int values match, == will return true.

class Engine: Equatable {
var horsepower: Int

init(horsepower: Int) {
self.horsepower = horsepower
}

static func == (lhs: Engine, rhs: Engine) -> Bool {
lhs.horsepower == rhs.horsepower
}
}

let engine1 == Engine(horsepower: 100 )
let engine2 == Engine(horsepower: 100 )
let engine3 == Engine(horsepower: 200 )

engine1 == engine2 // true
engine2 == engine3 // false

With === we’re asking if the objects on either sideof the operator point to the same reference. In other words, do they point to the same place in memory?

In the following example, when we compare engine1 to engineCopy(which is also referencing the same memory location), === returns true.

let engine1 = Engine(horsepower: 200 )
let engine2 = Engine(horsepower: 200 )
let engineCopy = engine1

engine1 === engineCopy // true
engine2 === engineCopy // false

However, in the second check, we can see that engine2 and engineCopy are pointing to entirely different objects, so even though thehorsepoweris the same,=== returns false.