объект против примитива - PullRequest
21 голосов
/ 27 декабря 2011

Недавно один из интервьюеров попросил определить разницу между объектами и примитивами. Казалось странным вопросом, учитывая, что все языки начинаются с примитива. Как бы вы ответили на этот вопрос?

Я также должен отметить, что это интервью предназначалось для разработки внешнего интерфейса, поэтому языком (я предполагаю) он имел в виду JavaScript.

Ответы [ 2 ]

37 голосов
/ 27 декабря 2011

Примитив - это тип данных, который не состоит из других типов данных и не может быть разбит в дальнейшем. Это как атомы в сценарии программирования. Я говорю «атом», потому что атом - это основная единица материи, и из него ничего нельзя извлечь.

Я имею в виду, int в C нельзя разбить на меньший тип данных. С другой стороны, объект можно представить как молекулу, состоящую из нескольких примитивных типов. Например, string входит в стандартную библиотеку C ++; тем не менее, это объект, и он состоит из небольших типов данных внутри и содержит методы.

Важно отметить, что не все объектно-ориентированные языки основаны на классах (например, Javascript). Вы не можете определить класс в Javascript, поэтому объект здесь совершенно другой. Несмотря на то, что все в Javascript является объектом (также Ruby), объект Number на самом деле является оберткой для внутреннего примитива.

11 голосов
/ 28 декабря 2011

С Java перспектива:

  1. Примитив не состоит из других типов данных.Где как объект может быть и, как правило, есть.
  2. Примитивы передаются по значению, т.е. передается копия самого примитива.В то время как для объектов передается копия ссылки, а не сам объект.
  3. Примитивы являются независимыми типами данных, т. Е. Для них не существует иерархии / суперкласса.Принимая во внимание, что каждый объект является потомком класса «Object».
  4. Каждый объект имеет свои методы по умолчанию, которые он наследует от класса Object (например, toString (), clone (), wait (), notify (), notifyAll () и т. д.).Примитивы не имеют какого-либо метода, связанного с самим собой.
  5. Примитивы являются неизменяемыми, их можно использовать без особой осторожности.В то время как для объектов необходимо соблюдать особую осторожность, они не являются неизменяемыми по умолчанию.
  6. Для объектов существует два типа копий: мелкая и глубокая.Между ними есть существенная разница.Поэтому выбор зависит от того, как мы собираемся их использовать.С примитивами такой разницы нет, по умолчанию все только для глубокого копирования.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...