TGViewer
Flutter Friendly Flutter Friendly @flutterfriendly · 996 subscribers
Post #349 864
👋Привет! Это Анна, Flutter Team Lead Friflex

Сегодня окунемся в базу, которая часто у новичков вызывает вопросы и непонимание — чем отличаются сравнения identical() и ==.

Для простоты понимания сначала вспомним, что объекты в коде (переменные) и объекты в памяти — это разные вещи.

Например, вы создаете класс Person.


class Person {
Person(this.name);

final String name;

@override
bool operator ==(Object other) => other is Person && other.name == name;

@override
int get hashCode => name.hashCode;
}


Теперь вы создаете его экземпляр и помещаете его в переменную person.


final person = Person('Anna');


Здесь создаваемый экземпляр Person('Anna') записывается объектом в память программы. А переменная person является ссылкой на объект Person('Anna'). Если же мы создадим два экземпляра Person('Anna'), то они будут занимать два отдельных места в памяти.

И теперь очень просто разделить два понятия:

Оператор == используется для проверки того, представляют ли две переменные одно и то же значение. А метод identical() — для проверки, ссылаются ли переменные на один и тот же объект в памяти.

Разберем на примере:

void main() {
final person1 = Person('Anna');
final person2 = Person('Anna');

print(person1 == person2); // выведет true
print(identical(person1, person2)); // выведет false
}


Здесь наглядно видно, что значения у переменных person1 и person2 одинаковые, но объекты, на которые они ссылаются — разные.

❕Есть одно маленькое, но важное уточнение — мы не используем константный конструктор. На что же влияет const?

При использовании const включается оптимизация памяти — канонизация (canonicalization). Если в программе встречаются два одинаковых вызова конструктора с const, второй экземпляр создаваться не будет. В памяти будет существовать лишь один объект.

Именно поэтому, если класс Person будет иметь константный конструктор const Person(this.name), то наш пример будет работать иначе.


void main() {
final person1 = const Person('Anna');
final person2 = const Person('Anna');

print(person1 == person2); // выведет true
print(identical(person1, person2)); // тоже выведет true
}


❤️ — если было полезно
  • ❤ 21
  • 👍 4
  • 🔥 4
  • 🤡 2
  • 😍 2
More from @flutterfriendly
  1. May 14, 2026👀Какой сложный вопрос или тема по Flutter вас сейчас беспокоят? Может, задача не идет, ба…
  2. Apr 17, 2026💭Привет! Это Роза, Flutter-разработчица Friflex! Уверена, многие из вас знакомы с Dart De…
  3. Apr 8, 2026Привет, друзья! Делимся нашей страничкой на Хабре, чтобы всегда оставаться на связи. Там е…
  4. Apr 3, 2026🌸Апрель в календаре и на экране Весна зовет обновлять визуальное: убирать темные темы и в…
  5. Apr 1, 2026Всегда с нетерпением ждем этого дня, чтобы сделать подборку ИТ-мемов Пусть поводов для улы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →