Объект против примитивного
Недавно собеседник попросил определить разницу между объектами и примитивами. Казалось, что странный вопрос, учитывая, что все языки начинаются с примитива. Как бы вы ответили на этот вопрос?
Я также должен отметить, что это интервью было для ориентированной на развитие позиции, поэтому язык (я предполагаю), на который он ссылался, был JavaScript.
Ответы
Ответ 1
Примитив - это тип данных, который не состоит из других типов данных и не может быть разбит дальше. Это похоже на атомы в сценарии программирования. Я говорю атом, потому что атом является базовой единицей материи, и нет ничего, что могло бы быть получено из него.
Я имею в виду, что int
в C нельзя разбить на меньший тип данных. С другой стороны, объект можно рассматривать как молекулу, состоящую из более чем одного примитивного типа. Например, string
входит в стандартную библиотеку С++; однако он является объектом и состоит из меньших типов данных внутри и содержит методы.
Важно отметить, что не все объектно-ориентированные языки основаны на классах (например, Javascript). Вы не можете определить класс в Javascript, поэтому объект здесь совсем другой. Несмотря на то, что все в Javascript является объектом (Ruby также), объект Number действительно является оберткой для внутреннего примитива.
Ответ 2
От перспективы Java:
- Примитив не состоит из других типов данных. Где в качестве объекта
может быть и вообще есть.
- Примитивы передаются по значению, т.е. копия самого примитива
передается. Если для объектов передается копия ссылки,
а не сам объект.
- Примитивы - это независимые типы данных, т.е. не существует
иерархия/суперкласс для них. В то время как каждый объект является потомком класса
"Объект".
- У каждого объекта есть собственные методы по умолчанию, которые он наследует
из класса Object (например, toString(), clone(), wait(), notify(),
notifyAll() и т.д.). У примитивов нет никакого метода
связанные с собой.
- Примитивы неизменяемы, их можно использовать без каких-либо специальных
забота. В то время как для объектов требуется особая забота, они
по умолчанию не является неизменяемым.
- С объектами существуют два типа копий: "Малая и глубокая". Там
является существенной разницей между ними. Таким образом, выбор зависит от
как мы намерены их использовать. С примитивами нет таких
разница, все по умолчанию имеет только глубокую копию.