Оператор ==
Оператор == сравнивает два объекта на равенство
и возвращает true, если они считаются равными,
и false в противном случае. В первый операнд
мы передаем объект, который сравниваем, во второй -
объект, с которым сравниваем. По умолчанию оператор
сравнивает ссылки на объекты, то есть два объекта
равны только если это один и тот же экземпляр.
Однако в классе оператор можно переопределить,
чтобы сравнивать объекты по их содержимому.
При переопределении == также следует
переопределять hashCode.
Синтаксис
object1 == object2
Пример
По умолчанию два разных объекта одного класса не равны, даже если их поля совпадают:
class Point
{
int x;
int y;
Point(this.x, this.y);
}
void main()
{
Point p1 = Point(1, 2);
Point p2 = Point(1, 2);
print(p1 == p2);
}
Результат выполнения кода:
false
Пример
Переопределим оператор ==, чтобы сравнивать
точки по координатам:
class Point
{
int x;
int y;
Point(this.x, this.y);
@override
bool operator ==(Object other)
{
if (identical(this, other)) return true;
return other is Point && other.x == x && other.y == y;
}
@override
int get hashCode => Object.hash(x, y);
}
void main()
{
Point p1 = Point(1, 2);
Point p2 = Point(1, 2);
Point p3 = Point(3, 4);
print(p1 == p2);
print(p1 == p3);
}
Результат выполнения кода:
true
false
Пример
Оператор == можно применять и к встроенным
типам. Например, сравним две строки с одинаковым
содержимым:
void main()
{
String str1 = 'abcde';
String str2 = 'abcde';
print(str1 == str2);
}
Результат выполнения кода:
true