Использование стека вызова функций в Dart для сохранения переменных double и int

Если в java, int и double - это элементарные типы, то в Dart это классы. Заметил, что в Dart при вызове функций, аргументы (переменные-объекты) типа int и double ведут себя так же как в Java, т.е. передаются по значению. Как объяснить такое поведение, ведь в данном случае переменные int и double-это объекты, и, мне кажется, было бы логично, если бы по значению передавались только ссылки на объекты. Где сохраняется в Dart содержимое локальных переменных int и double: в стеке или в куче? И за счет каких механизмов поддерживается логика работы с переменными int и double в DART? Кажется, что похожая логика работы реализована и в Kotlin...


Ответы (1 шт):

Автор решения: Plague Fox

Тут все дело в том, что int, double, String, boolean, null - это литералы (каноничные объекты) из коробки.

Поэтому при одинаковых значениях это буквально ссылка на один и тот же объект.

И сам объект иммутабельный.

void main() {
  print(identical(1, 1));
  print(identical('a', 'a'));
  print(identical(true, true));
}
→ Ссылка