Es kommt irgendwie auf die Sprache an.
Zum Beispiel, in Sprachen wie C und C ++, haben Sie eine Reihe von integrierten in skalare Typen - int
, float
, double
, char
, etc. Diese „primitive“ in dem Sinne, dass sie nicht in einfachere Komponenten zerlegt werden können. Aus diesen Basistypen können Sie neue Typen definieren - Zeigertypen, Arraytypen, Strukturtypen, Vereinigungstypen usw.
Dann haben Sie eine Sprache wie Lisp der alten Schule, in der alles entweder ein Atom oder eine Liste ist . Wiederum ist nach der obigen Definition ein Atom "primitiv" in dem Sinne, dass es nicht in etwas Einfacheres zerlegt werden kann.
Bearbeiten
Soweit es mich betrifft, sind die Begriffe "primitiv", "grundlegend" und "eingebaut" ziemlich austauschbar. Wenn Sie jedoch wirklich umständlich sein möchten , können Sie zwischen Typen unterscheiden, die "eingebaut" sind (die explizit durch die Sprachdefinition bereitgestellt werden), und Typen, die von den eingebauten Typen abgeleitet sind, die noch "primitiv" oder "einfach" sind. , dass sie nicht in einfachere Elemente zerlegt werden können. C'stypedef
Mit dieser Funktion können Sie neue Typnamen für vorhandene Typen erstellen. Mit Ada können Sie neue Skalartypen mit Einschränkungen erstellen. Sie können beispielsweise einen Latitude-Typ vom integrierten Floating-Typ ableiten, wobei die Einschränkung gilt, dass Werte außerhalb des Bereichs [-90.0, 90.0] nicht zulässig sind. Es ist immer noch ein primitiver oder grundlegender Typ, da es nicht in einfachere Komponenten zerlegt werden kann. Da es jedoch benutzerdefiniert ist, wird es nicht als "eingebauter" Typ betrachtet.
Auch diese Konzepte sind ein wenig verschwommen, und es kommt wirklich auf den Kontext an. Zum Beispiel ist der Begriff eines "eingebauten" Typs für eine typenlose Sprache wie BLISS bedeutungslos.
char
einen primitiven Typ undString
einen zusammengesetzten Typ ergibt .Aus der Java- Perspektive:
In Java gibt es eine sehr klare Unterscheidung zwischen primitiven und nicht-primitiven Typen.
Eine Variable eines primitiven Typs enthält direkt den Wert dieses Typs (mit anderen Worten, es handelt sich um Werttypen ).
Eine Variable eines nicht-primitiven Typs enthält den Wert nicht direkt. Stattdessen handelt es sich um eine Referenz (ähnlich einem Zeiger) auf ein Objekt. (In Java ist es nicht möglich, benutzerdefinierte Werttypen zu erstellen.)
Java hat acht primitive Typen:
byte
,short
,int
,long
,char
,boolean
,float
unddouble
. Alles andere ist ein nicht primitiver Typ.quelle
String
hat einen besonderen Status in der Sprache (es bekommt Literale, es ist in der Signatur vonmain
, es gibt Internierungen, von denen ich annehme, dass sie von der JLS explizit erlaubt sind, es ist automatisch verfügbar usw.), aber es ist kein primitiver Datentyp. Man könnte es als eingebaut bezeichnen .Ein Grundelement ist ein Basisdatentyp, der nicht aus anderen Datentypen aufgebaut ist. Es kann nur ein einziger Wert dargestellt werden. Alle Grundelemente sind notwendigerweise eingebaute Datentypen (der Compiler muss sie kennen), aber nicht alle eingebauten Datentypen sind Grundelemente.
In einigen Sprachen verfügt der Compiler über integriertes Wissen über bestimmte Typen, die aus anderen Dingen aufgebaut sind, da sie auf besondere Weise behandelt werden müssen. Beispiele wären die Variante in Delphi und Visual Basic (und das Boo-Äquivalent "Duck") und die Basisobjektklasse in den meisten OO-Sprachen.
quelle
Weil die Java-Sprachspezifikation sehr klar spezifiziert, was das Wort "primitiv" im Kontext von Java bedeutet, und Java
String
dieser Spezifikation nicht entspricht, während die SNOBOL4-Sprachspezifikation definiert, was "primitiv" im Kontext von SNOBOL4 und der SNOBOL4-Zeichenfolge bedeutet entspricht dieser Spezifikation.Da ist wirklich nichts mehr dran. Die Angabe der jeweiligen Sprache definiert, was bestimmte Wörter bedeuten und was entweder zu dieser Beschreibung passt oder nicht. Zum Beispiel definiert die C-Sprachspezifikation die Bedeutung des Wortes "Funktion" als etwas, was ganz klar nicht das ist, was das Wort "Funktion" normalerweise bedeutet, aber so wird das Wort in der C-Community verwendet.
quelle
Ein "primitiver" Datentyp bedeutet, dass Sie einen Wert im Speicher haben - dieser Wert hat keine Methoden oder interne Struktur. Ein Primitiv kann nur durch externe Operationen bearbeitet werden.
In Java sind Primitive Zahlen (int, long usw.) und char. http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
Wenn Ihr Wert eine Struktur hat (ich denke hier an Verstrebungen), dann ist es kein Primitiv. Wenn es Methoden (ein Objekt oder eine Klasse) hat, ist es kein Primitiv.
quelle
int
Datentyp hat Methoden ...var myString = 3.ToString();
(Siehe Int32.ToString () ). Beachten Sie, dassint
in C # ist ein Synonym fürInt32
, das heißt,Int32
ist ein primitiver Typ ( im Gegensatz zu Java, woInteger
verschieden istint
). Also,3.ToString()
in C # geht es nicht um Boxen!Ich bin auf einige Informationen gestoßen und hatte das Gefühl, dass sie die anderen Antworten unterstützen würden. Also willst du es teilen -
Wikipedia sagt -
In der Informatik ist der primitive Datentyp einer der folgenden:
Ein Basistyp ist ein Datentyp, der von einer Programmiersprache als Grundbaustein bereitgestellt wird. In den meisten Sprachen können kompliziertere zusammengesetzte Typen ausgehend von Basistypen rekursiv konstruiert werden.
Ein integrierter Typ ein Datentyp ist , für die der Programmiersprache träger eingebaut liefert.
In den meisten Programmiersprachen sind alle grundlegenden Datentypen integriert. Darüber hinaus bieten viele Sprachen eine Reihe von zusammengesetzten Datentypen ("String" -Typ in Java).
Ich möchte es so sagen -
Ein Basisdatentyp ist ein Datentyp, der nicht weiter unterteilt werden kann ("string" -Typ kann aus "char" gebildet werden, char kann jedoch nicht in einen beliebigen Datentyp "unterteilt" werden (In den meisten Programmen) sprachen). Also es ist grundlegende datentyp)
Der String-Typ in SNOBOL4 wird als primitiv betrachtet. Der genaue Grund dafür ist mir jedoch nicht bekannt. Es ist sowohl einfach als auch in SNOBOL4 integriert.
Die Java-Spezifikation erwähnt deutlich die Liste der Datentypen, die sie als primitiven Typ betrachtet. Da der Zeichenfolgentyp nicht in der Spezifikation enthalten ist , ist er in Java kein primitiver Datentyp, obwohl er ein integrierter Typ ist.
quelle
Primitive sind grundlegende Datentypen, die von der Sprache selbst bereitgestellt werden. Beispiele in C-Sprache sind die Datentypen int, float und char. Es wird als grundlegender Bestandteil der Sprache bereitgestellt.
Nicht-Primitive sind benutzerdefinierte Variablen oder Objekte. Beispielsweise können Sie ein Objekt definieren, das Daten speichert, oder Sie können struct in C verwenden, um Ihre eigenen Variablen zu definieren. Diese sind nicht primitiv, da Sie sie zuerst definieren mussten, um sie zu verwenden.
Bearbeiten Sie mit mehr Erklärung und Adressierung des Kommentars Ich denke an primitive Variablen, die ursprünglich mit der Sprache geliefert wurden, und nicht an Variablen wie String in C ++, die Sie mit dem New-Schlüsselwort deklarieren müssen. Das macht es zu einem Objekt, sodass ein String kein Primitiv wäre.
Antwort Sie Kommentar: Es hat wahrscheinlich mit der Implementierung der Variablen zu tun. Wenn es Teil des Sprachkerns war, ist es primitiv. Wenn nicht, ist es nicht. Beispiel ist String in C ++. Dies ist keine Kernvariable und wird mit dem Schlüsselwort New deklariert. Es ist also nicht primitiv.
quelle
string
Datentyp als solchen bereit . Zeichenfolgen werden als Aggregate des primitiven Typs dargestelltchar
. C ++ hat einen geeignetenstring
Datentyp eingeführt, aber ob es sich um einen "primitiven" Typ handelt, hängt davon ab, wen Sie fragen. Persönlich würde ich es nicht als solches klassifizieren. Ich würde jedoch einen BASIC-Stringtyp der alten Schule aus Gründen, die wahrscheinlich völlig willkürlich sind, als primitiven Typ klassifizieren.Zum besseren Verständnis des Konzepts primitiver Typen und benutzerdefinierter Datentypen fehlt den anderen Antworten lediglich das Konzept von
compiler
.Wenn Sie das Konzept der Auswahl von Lexemen als Token verstehen , werden Sie feststellen, dass Primitive die einzigen Datentypen sind, die ein Compiler für sich kennt.
quelle