基元类型和引用类型之间的区别是什么?

这是一个过去的考试问题,我想知道什么是基本类型和引用类型首先? 对于数组,我知道引用类型是数组由对象或变量组成的地方,而基元类型是只用 int 或字符串创建数组的地方。(对吧?)

你认为你将如何回答考试中的问题并获得良好的学分?没有直接引用原始数组类型... ... 有没有办法不引用原始数组类型?或者你觉得用数组来解释一下。

202164 次浏览

这些是 Java 中的基本类型:

  • 布尔型
  • 字节
  • 太短了
  • Char
  • Int
  • 很长
  • 漂浮
  • 双倍

所有其他类型都是引用类型: 它们引用对象。

这是 关于语言基础的 Java 教程的第一部分。

简而言之,原语是数据类型,而引用是指针,这些指针不保存它们的值,而是指向它们的值,并用于对象。

基本原理 :

布尔型

性格

字节

太短了

整数

很长

漂浮

双倍

许多解释这些基本概念的参考资料

这些是原始数据类型

  • 布尔型
  • 性格
  • 字节
  • 太短了
  • 整数
  • 很长
  • 漂浮
  • 双倍

另一方面,对象数据类型或引用数据类型存储在由 GC 管理的存储器的磁头中

这是最重要的区别

从书 OCA JAVA SE 7

正如男人和女人在本质上是不同的(根据约翰 格雷,《男人来自火星,女人来自金星》的作者) ,原始 变量和对象引用变量在 基本区别在于基本变量存储 实际值,而引用变量存储 我们假设类 Person 是 如果创建一个整型变量 a 和一个对象 引用变量 person 时,它们将其值存储在内存中,如下所示 图2.13所示。

int a = 77;
Person person = new Person();

enter image description here

原语与引用

第一:-

基本类型是数据的基本类型: byteshortintlongfloatdoublebooleanchar. 基元变量存储基元值。 引用类型是任何可实例化的类和数组: StringScannerRandomDieint[]String[]等等。 引用变量将地址存储到存储数据的内存 中的位置。

第二:-

基本类型存储值,但引用类型存储堆空间中对象的句柄

阅读更多: http://javarevisited.blogspot.com/2015/09/difference-between-primitive-and-reference-variable-java.html#ixzz3xVBhi2cr

原始数据类型:

  • 由语言预定义并由关键字命名
  • 总数不等于8
    布尔型
    Char
    字节
    太短了
    整数
    很长
    漂浮
    双倍

参考/对象资料类型:

  • 使用类的已定义构造函数创建
  • 用于访问对象
  • 任何引用变量的默认值为空
  • 引用变量可用于引用声明类型或任何兼容类型的任何对象。

正如许多人或多或少正确地指出了引用和基元类型是什么,人们可能会感兴趣的是,我们在 Java 中有一些更相关的类型。下面是 Java 中类型的完整列表(据我所知(JDK11))。

原始类型

描述值(而不是类型)。

11

参考类型

描述实例扩展 Object (接口、类、枚举、数组)的具体类型!

Integer

注意: 基元类型和引用类型之间的区别使得有必要依赖装箱来转换 Object 实例中的基元,反之亦然。

注2: type 参数描述具有可选的下限或上限的类型,并且可以在其上下文中通过名称引用(与通配符类型相反)。类型参数通常可以应用于参数化类型(类/接口)和方法。参数类型定义类型标识符。

通配符类型

表示未知类型(如 TypeScript 中的任何类型) ,该类型通过使用 super 或扩展可具有下限或上限。

? extends List<String>
? super ArrayList<String>

空洞型

虚无。没有价值/实例可能。

void method();

无类型

唯一的表示是‘ null’。它尤其用于类型干涉计算。Null 是逻辑上属于任何类型的特殊情况(可以赋值给任何类型的任何变量) ,但实际上不被认为是任何类型的实例(例如(Null instanceof Object) = = false)。

null

工会类型

联合类型是实际上是一组可选类型的类型。遗憾的是,在 Java 中它只存在于 multi catch 语句中。

catch(IllegalStateException | IOException e) {}

干扰类型

与多种类型兼容的类型。因为在 Java 中一个类最多只有一个超类(对象没有超类) ,所以干扰类型只允许第一个类型是类,其他所有类型都必须是接口类型。

void method(List<? extends List<?> & Comparable> comparableList) {}

未知类型

类型是未知的,这是某些 Lambda 定义的情况(未括在括号中,单个参数)。

list.forEach(element -> System.out.println(element.toString)); //element is of unknown type

Var 型

变量声明引入的未知类型检测‘ var’关键字。

var variable = list.get(0);

原始数据类型

基本数据类型是编程语言提供的基本类型,作为基本构造块。所以它是预定义的数据类型。基元类型总是有一个值。它存储简单的价值。

它指定变量值的大小和类型,因此基元类型的大小取决于数据类型,并且没有其他方法。

这些是语言中保留的关键词。因此,我们不能使用这些名称作为变量、类或方法的名称。基元类型以小写字母开头。在声明基元类型时,我们不需要分配内存。(内存由 Java 中的 JRE-JRE分配和释放)

Java 中的8种基本数据类型

+================+=========+===================================================================================+
| Primitive type | Size    | Description                                                                       |
+================+=========+===================================================================================+
| byte           | 1 byte  | Stores whole numbers from -128 to 127                                             |
+----------------+---------+-----------------------------------------------------------------------------------+
| short          | 2 bytes | Stores whole numbers from -32,768 to 32,767                                       |
+----------------+---------+-----------------------------------------------------------------------------------+
| int            | 4 bytes | Stores whole numbers from -2,147,483,648 to 2,147,483,647                         |
+----------------+---------+-----------------------------------------------------------------------------------+
| long           | 8 bytes | Stores whole numbers from -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 |
+----------------+---------+-----------------------------------------------------------------------------------+
| float          | 4 bytes | Stores fractional numbers. Sufficient for storing 6 to 7 decimal digits           |
+----------------+---------+-----------------------------------------------------------------------------------+
| double         | 8 bytes | Stores fractional numbers. Sufficient for storing 15 decimal digits               |
+----------------+---------+-----------------------------------------------------------------------------------+
| char           | 2 bytes | Stores a single character/letter or ASCII values                                  |
+----------------+---------+-----------------------------------------------------------------------------------+
| boolean        | 1 bit   | Stores true or false values                                                       |
+----------------+---------+-----------------------------------------------------------------------------------+

引用数据类型

引用数据类型引用对象。这些类型中的大多数不是由编程语言定义的(除了 String,JAVA 中的数组)。值的引用类型可以为空。它存储它所引用的对象的地址。 引用或非基元数据类型的大小都相同。和引用类型可用于调用方法以执行某些操作。

声明引用类型时需要分配内存。在 Java 中,我们使用 new关键字来分配内存,或者调用工厂方法。

例如:

List< String > strings = new ArrayList<>() ;  // Calling `new`  to instantiate an object and thereby allocate memory.


Point point = Point(1,2) ;           // Calling a factory method.

不同之处在于,无论您为基本变量 PV 赋予什么值,实际值都将与变量 PV 相关联,而不是对该值的引用。另一方面,不管你给引用变量 RV 赋什么值,对那个值的引用是与变量 RV 相关联的,而不是值本身。