对象与原语

object vs. primitive

本文关键字:原语 对象      更新时间:2023-09-26

最近有一个面试官要求我定义对象和原语之间的区别。似乎是一个奇怪的问题,因为所有的语言都是从一个原始语开始的。你会怎么回答这个问题?

我还应该注意到,这次面试是针对前端开发职位的,所以他所指的语言(我猜)是JavaScript。

原语是一种不由其他数据类型组成的数据类型,不能进一步分解。它就像编程场景中的原子。我说原子,是因为原子是物质的基本单位,没有任何东西可以从它推导出来。

我的意思是,C中的int不能分解成更小的数据类型。另一方面,一个物体可以被认为是一个分子,由一个以上的原始类型组成。例如,string是c++标准库的一部分;然而,它是一个对象,它内部由较小的数据类型组成,并包含方法。

值得注意的是,并非所有面向对象语言都是基于类的(例如:你不能在Javascript中定义一个类,所以对象在这里是完全不同的。尽管Javascript中的所有东西都是对象(Ruby也是),但Number对象实际上是内部原语的包装器。

Java :

  1. 原语不是由其他数据类型组成的。作为一个对象
  2. 原语通过值传递,即原语本身的副本是过去了。而对于对象,则传递引用的副本,而不是对象本身。
  3. 原语是独立的数据类型,即不存在它们的层次结构/超类。而每个Object都是class的后代"对象"。
  4. 每个对象都有一些它自己的默认方法,它继承了这些方法从Object类(例如toString(), clone(), wait(), notify(),notifyAll(),等等)。原语没有任何方法
  5. 原语是不可变的,不需要任何特殊的修饰就可以这样使用它们护理。而对于物体,需要特别小心,它们是
  6. 对于对象,有两种类型的拷贝,浅拷贝和深拷贝。在那里是它们之间的显著区别。所以选择取决于我们打算如何使用它们。对于原语,没有这样的

让我们可视化一下实际的差异。

原语

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

例如

:基本类型int表示使用32位的整数。所有int类型的变量都使用32位

2) Java中只有八种基本数据类型:byte、short、int、long、float、double、char和boolean。Java程序不能定义任何其他基本数据类型。

对象

对象是一大块内存,它可能包含大量数据以及处理这些数据的方法(小程序)。Java标准提供了数以千计的对象类,程序员可以轻松地创建额外的类。(虽然有成千上万的标准类,但对于这门课程,你只需要熟悉十几个类。)

我认为primitive不能像int, string(如内置数据类型)那样被分割.另一方面,对象也可以分成数组、结构体等小块。

我只是一个学生,这是我的观点。
如果你认为我的答案错了,你可以纠正我。
由于

在Java中,当您将k字段发送给测试方法时,首先将其转换为Integer类型。因为基本类型不是Object类型的子类型之一。

public static void main(String[] args) {
    int k=3;
    test(k);
    test2(k);
}
private static void test(Object k) {
    System.out.print(k.getClass().isPrimitive());//false
}
private static <T> void test2(T k) {
    System.out.print(k.getClass().isPrimitive());//false
}