对象与原语

时间:2011-12-27 09:54:13

标签: javascript oop object primitive

最近有一位采访者要求定义对象和基元之间的区别。考虑到所有语言都以原语开头,这似乎是一个奇怪的问题。你怎么回答这个问题?

我还应该注意,这次访谈是针对前端开发的,所以他所指的语言(我假设)是JavaScript。

4 个答案:

答案 0 :(得分:35)

基元是一种数据类型,它不包含其他数据类型,不能再进一步细分。它就像编程场景中的原子。我说原子是因为原子是物质的基本单位,没有任何东西可以从中得到。

我的意思是,C中的int无法细分为较小的数据类型。另一方面,物体可以被认为是由多于一种原始类型组成的分子。例如,string是C ++标准库的一部分;但是,它是一个对象,它由内部较小的数据类型组成,并包含方法。

值得注意的是,并非所有面向对象的语言都是基于类的(例如Javascript)您无法在Javascript中定义类,因此这里的对象完全不同。即使Javascript中的所有内容都是对象(也是Ruby),Number对象实际上是内部基元的包装器。

答案 1 :(得分:10)

Java 角度来看:

  1. 基元不是由其他数据类型组成的。作为对象的地方 可以并且通常是。
  2. 原语按值传递,即原语本身的副本 通过。而对于对象,则传递引用的副本, 不是对象本身。
  3. 基元是独立的数据类型,即不存在 他们的等级/超级。而每个对象都是阶级的后代 “对象”。
  4. 每个对象都有自己的一些默认方法,它继承了这些方法 来自Object类(例如toString(),clone(),wait(),notify(), notifyAll()等)。原语没有任何方法 与自己联系。
  5. 原语是不可变的,它们可以毫无特殊地使用 关心。对于物体,需要特别注意,它们是 默认不是不可变的。
  6. 对于对象,有两种类型的副本,浅和深。那里 是他们之间的显着差异。所以选择取决于 我们如何打算使用它们。有原始的,没有这样的 差异,一切都是默认的深拷贝。

答案 2 :(得分:0)

我认为原语无法再进行整数,字符串(例如内置数据类型)的划分 。 另一方面,对象可以分为数组,结构之类的小块。

我只是一个学生,这是我的看法。
如果您认为我的答案有误,可以纠正我。
谢谢

答案 3 :(得分:0)

让我们可视化实际差异。

原语

1)基本数据类型使用少量内存来表示单个数据项。所有相同原始类型的数据都具有相同的大小。

例如: 原始类型int使用32位表示整数。所有类型为int的变量都使用32位。

2)Java中只有八种原始数据类型:字节,短型,整型,长型,浮点型,双精度型,字符型和布尔型。 Java程序无法定义任何其他原始数据类型。

对象

对象是一个很大的内存块,它可能包含大量数据以及用于处理该数据的方法(小型程序)。 Java有成千上万种标准的对象类,程序员可以轻松地创建其他类。 (尽管有成千上万的标准课程,但对于本课程,您只需要熟悉十几个课程即可。)