Answers:
这取决于语言。
例如,在像C和C ++语言,你有一些内置的标量类型- ,int
,float
,double
,char
等等,这些都是在这个意义上的“原始”,他们不能被分解成简单的组件。从这些基本类型中,您可以定义新类型-指针类型,数组类型,结构类型,联合类型等。
然后,您有一种像老式Lisp这样的语言,其中的所有内容都是原子或列表。同样,根据上述定义,原子是“原始的”,因为它不能分解为更简单的事物。
编辑
就我而言,术语“原始”,“基本”和“内置”几乎可以互换。但是,如果您想真正学究,则可以区分“内置”类型(由语言定义明确提供的类型)和从仍为“原始”或“基本”内置类型派生的类型因为它们不能分解成更简单的元素。C的typedef
工具允许您为现有类型创建新的类型名称。Ada允许您创建对它们具有约束的新标量类型。例如,您可以从内置的浮点型派生一个“纬度”类型,但要限制它不能采用[-90.0,90.0]范围之外的值。它仍然是原始或基本类型,无法将其分解为任何更简单的组件,但是由于它是用户定义的,因此不被视为“内置”类型。
同样,这些概念有点模糊,它实际上取决于上下文。例如,“内置”类型的概念对于像BLISS这样的无类型语言毫无意义。
char
基本类型和String
复合类型。
从Java角度来看:
在Java中,原始类型和非原始类型之间有非常明显的区别。
基本类型的变量直接包含该类型的值(换句话说,它们是值类型)。
非基本类型的变量不直接包含该值。相反,它是对对象的引用(类似于指针)。(在Java中无法创建用户定义的值类型)。
Java有八种原始类型:byte
,short
,int
,long
,char
,boolean
,float
和double
。其他都是非原始类型。
原语是一种基本数据类型,并非由其他数据类型构建而成。它只能代表一个单一值。所有原语必定是内置数据类型(编译器必须了解它们),但并非所有内置数据类型都是原语。
在某些语言中,编译器具有某些其他类型的内建知识,因为它必须能够以特殊方式对其进行处理。例如,Delphi和Visual Basic中的Variant(以及Boo的等同物“ Duck”)和大多数OO语言中的基础对象类。
为什么在SNOBOL4中而不是Java中将“字符串”类型视为原始类型?
因为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中的“字符串”类型)。
我想这样说-
基本的数据类型是无法进一步细分的数据类型(“字符串”类型可以由“ char”组成,但是char不能“分解”为任何数据类型(在大多数编程中语言),因此是基本数据类型)
在SNOBOL4中,字符串类型被认为是原始类型。尽管我不知道为什么。它既基本又内置于SNOBOL4中。
Java规范清楚地提到了它认为是原始类型的数据类型列表。因为字符串类型不在其规范中,所以它不是Java中的原始数据类型,尽管它是内置类型。
基元是语言本身提供的基本数据类型。C语言的示例是int,float,char数据类型。它作为语言的基本部分提供。
非基元是用户定义的变量或对象。例如,您可以定义一个存储数据的对象,或者可以在C语言中使用struct定义自己的变量。这些不是原始的,因为您必须先定义它们才能使用它们。
示例:员工,学生,a_very_large_number_that_you_defined_yourself
编辑更多说明并解决注释, 我认为原语是语言本身附带的变量,而不是C ++中像String这样的变量,您必须使用New关键字进行声明。这使其成为一个对象,因此String不会是原始类型。
回答您的评论:它可能与变量的实现有关。如果它是语言核心的一部分,那么它就是原始的。如果不是,则不是。示例是C ++中的String。这不是核心变量,而是使用New关键字声明的。所以它不是原始的。
string
数据类型。字符串表示为原始类型的集合char
。C ++引入了适当的string
数据类型,但是它本身是否是“原始”类型取决于您询问的人。就个人而言,我不会将其归类。但是,由于某种原因,我可能会将老式BASIC字符串类型归类为原始类型。