Это зависит от языка.
Например, в таких языках , как C и C ++, у вас есть несколько встроенных скалярные типы - int
, float
, double
, char
и т.д. Они являются «примитивными» в том смысле , что они не могут быть разложены на более простые компоненты. Из этих основных типов вы можете определить новые типы - типы указателей, типы массивов, типы структур, типы объединения и т. Д.
Тогда у вас есть язык наподобие старой школы Lisp, где все является либо атомом, либо списком . Опять же, согласно приведенному выше определению, атом является «примитивным» в том смысле, что он не может быть разложен в нечто более простое.
редактировать
Насколько мне известно, термины «примитив», «базовый» и «встроенный» в значительной степени взаимозаменяемы. Однако, если вы хотите стать действительно педантичным, вы можете различать «встроенные» типы (те, которые явно определены в определении языка) и типы, полученные из встроенных типов, которые все еще являются «примитивными» или «базовыми». в том, что они не могут быть разложены на более простые элементы. Кассиопеянеtypedef
средство позволяет создавать новые имена типов для существующих типов. Ада позволяет вам создавать новые скалярные типы, которые имеют ограничения на них. Например, вы можете получить тип Latitude из встроенного плавающего типа с ограничением, которое не может принимать значения за пределами диапазона [-90.0, 90.0]. Это все еще примитивный или базовый тип в том смысле, что его нельзя разбить на более простые компоненты, но, поскольку он определяется пользователем, он не считается «встроенным» типом.
Опять же, эти понятия немного размыты, и это действительно зависит от контекста. Например, понятие «встроенный» тип не имеет смысла для такого типа языка, как BLISS.
char
примитивный тип иString
составной тип.С точки зрения Java :
В Java существует очень четкое различие между примитивными и не примитивными типами.
Переменная типа примитива напрямую содержит значение этого типа (другими словами, они являются типами значений ).
Переменная не примитивного типа не содержит значения напрямую; вместо этого это ссылка (похожая на указатель) на объект. (В Java невозможно создать определяемые пользователем типы значений).
Java имеет восемь примитивных типов:
byte
,short
,int
,long
,char
,boolean
,float
иdouble
. Все остальное не является примитивным типом.источник
String
делает имеет особый статус в языке (он получает литералы, это в подписиmain
, там интернатуру , которую я предполагаю , это явно разрешен JLS, он доступен автомагический и т.д.) , но это не примитивный типа данных. Можно было бы назвать это встроенным .Примитив - это базовый тип данных, который не построен из других типов данных. Он может представлять только одно значение. Все примитивы по необходимости являются встроенными типами данных (о них должен знать компилятор), но не все встроенные типы данных являются примитивами.
В некоторых языках компилятор имеет встроенные знания определенных типов, которые построены из других вещей, потому что он должен иметь возможность обрабатывать их особым образом. Примерами могут служить вариант в Delphi и Visual Basic (и эквивалент Boo, «Утка») и класс базовых объектов в большинстве языков OO.
источник
Поскольку спецификация языка Java очень четко определяет, что означает слово «примитив» в контексте Java, а Java
String
не соответствует этой спецификации, тогда как спецификация языка SNOBOL4 определяет, что означает «примитив» в контексте строки SNOBOL4 и SNOBOL4. соответствует этой спецификации.Там действительно больше ничего нет. Спецификация соответствующего языка определяет, что означают определенные слова, а что-то либо соответствует этому описанию, либо нет. Например, спецификация языка C определяет значение слова «функция» как нечто, совершенно не то, что обычно означает слово «функция», но именно так слово используется в сообществе C.
источник
«Примитивный» тип данных означает, что у вас есть значение, хранящееся в памяти - это значение не имеет методов или внутренней структуры. Примитив может работать только с помощью внешних операций.
В Java примитивами являются числа (int, long и т. Д.) И char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Если ваша ценность имеет структуру (я думаю о стойках здесь), то это не примитив. Если у него есть методы (объект или класс), это не примитив.
источник
int
типа данных делает есть методы ...var myString = 3.ToString();
(см. Int32.ToString () ). Обратите внимание , чтоint
в C # является синонимом дляInt32
, т.е.Int32
это примитивный тип ( в отличие от Java, гдеInteger
отличается отint
). Таким образом,3.ToString()
в C # не участвует бокс!Я наткнулся на некоторую информацию и почувствовал, что она поможет другим ответам. Итак, хочу поделиться этим -
Википедия говорит -
В информатике примитивный тип данных является одним из следующих:
Базовый тип - это тип данных, предоставляемый языком программирования в качестве базового строительного блока. Большинство языков позволяют рекурсивно создавать более сложные составные типы, начиная с базовых типов.
Встроенный тип - это тип данных, для которого язык программирования обеспечивает встроенную поддержку.
В большинстве языков программирования все основные типы данных являются встроенными. Кроме того, многие языки также предоставляют набор составных типов данных («строковый» тип в Java).
Я хотел бы сказать это так
: базовый тип данных - это тип данных, который не может быть далее разбит (тип "string" может быть сделан из "char", но char не может быть "разбит" на любой тип данных (в большинстве программирования языки). Так что это основной тип данных)
Строковый тип в SNOBOL4 считается примитивным. Хотя я не знаю точную причину. Это как основной, так и встроенный в SNOBOL4.
Спецификация Java четко упоминает список типов данных, которые он считает типом примитива. Поскольку строковый тип не указан в их спецификации , он не является примитивным типом данных в Java, несмотря на то, что он является встроенным типом.
источник
Примитивы - это фундаментальные типы данных, предоставляемые самим языком. Примером на языке C являются типы данных int, float, char. Это предоставляется как фундаментальная часть языка.
Не примитивы - это пользовательские переменные или объекты. Например, вы можете определить объект, который хранит данные, или вы можете использовать struct в C, чтобы определить ваши собственные переменные. Они не примитивны, потому что вы должны были сначала определить их, чтобы использовать их.
Отредактируйте с дополнительным объяснением и адресом комментария Я думаю, что примитив - это переменные, которые изначально были в языке, а не переменные, такие как String в C ++, которые вы должны объявить с помощью ключевого слова New. Это делает его объектом, поэтому строка не будет примитивной.
Ответ на ваш комментарий: Это, вероятно, связано с реализацией переменной. Если это было частью языкового ядра, оно примитивно. Если нет, то это не так. Примером является строка в C ++. Это не основная переменная, и она объявляется с использованием ключевого слова New. Так что это не примитивно.
источник
string
тип данных как таковой; Строки представлены как агрегаты примитивного типаchar
. C ++ ввел правильныйstring
тип данных, но будет ли он сам по себе «примитивным», зависит от того, кого вы спрашиваете. Лично я бы не классифицировал это как таковое. Однако я бы классифицировал тип строки BASIC старой школы как примитивный тип по причинам, которые, вероятно, являются совершенно произвольными.Для лучшего понимания концепции примитивных типов и пользовательских типов данных все, чего не хватает другим ответам, - это концепция
compiler
.Если вы понимаете концепцию выбора лексем в качестве токенов , вы поймете, что примитивы - это единственные типы данных, которые компилятор знает сам по себе.
источник