Java 中的非原始数据类型

2025 年 5 月 13 日 | 阅读 6 分钟

数据类型定义了变量中存储的数据的类型。类型指定了数据的种类(不同的尺寸和值)。

Java 编程语言有两种数据类型

  1. 原始数据类型(预定义数据类型)
  2. 非原始数据类型

在本节中,我们将了解 **非原始数据类型**、它们在 Java 中的用途和实现。

非原始数据类型

与原始数据类型不同,这些不是预定义的。它们是程序员创建的用户定义数据类型。这些数据类型用于存储多个值。

例如,考虑一个存储一组值的 数组。类也是一种原始类型,它存储不同的方法和变量。因此,它们也被称为 Java 中的 **高级数据类型**。

每当定义非原始数据类型时,它都会引用一个内存位置,该位置在堆内存中存储数据,即它引用对象所在的内存位置。因此,非原始数据类型变量也称为 **引用数据类型** 或 **简称为对象引用变量**。

对象引用变量存在于栈内存中,它指向的对象始终存在于堆内存中。栈保存指向堆上对象的指针。

在 Java 编程中,所有非原始数据类型都简单地称为通过实例化类创建的对象。

要点

  1. 任何引用变量的默认值都是 null。
  2. 当我们向方法传递非原始数据类型时,我们传递的是存储数据对象的地址。

非原始数据类型的类型

Java 中有五种非原始数据类型。它们如下:

  1. Class
  2. Object
  3. String
  4. Array
  5. Interface

1. 类和对象

Java 中的 是用户定义的数据类型,即由用户创建。它充当数据模板,包含成员变量和方法。

对象 是类的变量,可以访问类中的元素,即方法和变量。

示例

在下面的示例中,我们正在创建一个包含变量和方法(**add() 和 sub()**)的类。在这里,我们使用类 **obj** 的对象来访问方法。

ClassExample.java

输出

Addition of numbers is: 30
Subtraction of numbers is: 10

2. 接口

接口 类似于类,但唯一的区别是它的方法默认是抽象的,即它们没有方法体。接口只有 final 变量和方法声明。它也被称为完全抽象类。

注意:如果类实现了接口,则必须实现该接口的所有方法。否则,必须将类声明为 abstract。

示例

在下面的示例中,我们正在创建带有两个抽象方法(**multiply() 和 divide()**)的接口 CalcInterface。在这里,类 InterfaceExample 实现该接口,并进一步定义该接口的方法。然后,使用类对象来访问这些方法。

InterfaceExample.java

3. String

字符串表示一个字符序列,例如“Javatpoint”、“Hello world”等。String 是 Java 的一个类。

创建字符串并为其赋值的一种方法如下所示:

在这里,String 类型变量 **str** 的值为“You're the best”。单击此处了解有关 Java 中的 String 的更多信息。

示例

在下面的示例中,我们正在创建一个带有值的字符串。在这里,我们使用 String 类的一个方法 **substring()**,该方法打印字符串中指定索引的部分。

StringExample.java

输出

Hello! This is

4. 数组

数组 是一种数据类型,它可以在一个序列中存储多个同构变量,即相同类型的数据。它们以从索引 0 开始的索引方式存储。变量可以是原始数据类型,也可以是非原始数据类型。

以下示例显示了如何声明原始数据类型 **int** 的数组

以下示例显示了如何声明非原始数据类型的数组

其中,**Student** 是类名,[ ] 创建了对象 **students** 的数组。

示例

在下面的示例中,我们创建了两个基本数组,其中一个已初始化,另一个已声明(输入从用户读取)。此外,我们使用 for 循环打印这些数组。

ArrayExample.java

输出

Enter the numbers (size = 5) :
56
43
22
1
7
Previous array with initialized size is:
1 2 3 6 9
The new array we have entered is:
56 43 22 1 7

Java 中原始数据类型和非原始数据类型的区别

  1. 在 Java 中,原始数据类型是系统定义的,而我们需要创建和定义非原始数据类型。
  2. 在原始数据类型中,变量一次只能存储一个值。然而,在非原始数据类型中,可以存储相同类型或不同类型的多个值,或两者都可以。
  3. 所有原始类型变量的数据都存储在栈中,而对于引用类型,栈保存指向堆上对象的指针。
  4. 原始类型以小写字母开头,而非原始类型以大写字母开头。
  5. 原始类型的大小取决于数据类型,而非原始类型的大小都相同。