Объект против примитивного

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

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

Ответы

Ответ 1

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

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

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

Ответ 2

От перспективы Java:

  • Примитив не состоит из других типов данных. Где в качестве объекта может быть и вообще есть.
  • Примитивы передаются по значению, т.е. копия самого примитива передается. Если для объектов передается копия ссылки, а не сам объект.
  • Примитивы - это независимые типы данных, т.е. не существует иерархия/суперкласс для них. В то время как каждый объект является потомком класса "Объект".
  • У каждого объекта есть собственные методы по умолчанию, которые он наследует из класса Object (например, toString(), clone(), wait(), notify(), notifyAll() и т.д.). У примитивов нет никакого метода связанные с собой.
  • Примитивы неизменяемы, их можно использовать без каких-либо специальных забота. В то время как для объектов требуется особая забота, они по умолчанию не является неизменяемым.
  • С объектами существуют два типа копий: "Малая и глубокая". Там является существенной разницей между ними. Таким образом, выбор зависит от как мы намерены их использовать. С примитивами нет таких разница, все по умолчанию имеет только глубокую копию.