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

2025年9月4日 | 阅读 8 分钟

Java 是世界上最受欢迎的编程语言之一,被用于从移动应用程序到企业系统的各种事物。学习 Java 的一个重要部分是理解数据类型,它告诉程序变量可以存储哪种类型的值。在 Java 中,数据类型主要分为两类:原始数据类型和非原始数据类型。每种类型都有不同的用途,并有助于在程序中以不同的方式管理数据。

什么是原始数据类型?

原始数据类型是程序中处理信息的构建块。这些类型是 Java 内置的,所以我们不需要自己创建它们。它们用于存储简单值,如数字、字母或真/假答案。

阅读更多 Java 中的原始数据类型

Java 具有以下八种原始类型:

  • byte:用于非常小的数字。它不占用太多空间,因此在想要节省内存时很有用。
  • short:比 byte 大一点,仍然用于较小的整数。
  • int:它是存储整数(如 5、100 或 500)最常见的类型。
  • long:在我们需要存储不适合 int 的大整数时使用。
  • float:存储带有小数的数字(如 2.17),但精度低于 double。
  • double:也存储带有小数的数字,但精度更高。它比 float 使用更频繁。
  • char:存储单个字符,如 'A'、'z',甚至像 '#' 这样的符号。
  • boolean:此类型只有两个可能的值:true 或 false。

原始数据类型的特点

固定大小: Java 中的每种原始类型都使用特定量的内存。这有助于系统知道为每个变量分配多少空间。

存储实际值: 原始类型是变量本身持有实际值,而不是指向它的指针或链接。例如,一个 int 变量包含我们赋给它的数字。

方法和属性: 与对象不同,原始类型不附带方法或额外功能。它们是为了简单明了。

默认值为 null: 如果我们在不设置值的情况下创建一个变量,Java 会给它一个默认值。例如,int 初始化为 0,Boolean 初始化为 false。

高效: 原始类型在内存和性能方面非常高效,因为它们处理原始数据,不涉及任何引用或对象。

示例:原始数据类型的使用

示例

编译并运行

输出

- Student Profile -
Name: Jhon Doe
Age: 25
Gender: M
Enrolled: true
Student ID: 5206698472114
Average Score: 82.5
Attendance: 92.3%
Semester: 4
Total Subjects: 6

解释

在上面的程序中,我们展示了如何使用不同类型的原始数据类型来存储有关学生的信息。例如,我们使用 int 来存储学生的年龄。char 类型用于存储性别,用单个字母如 'M' 表示。

为了检查学生是否已注册,我们使用 boolean,它返回 true 或 false。学生的平均分数(一个带小数的数字)使用 double 存储,他们的学号使用 long 存储。我们使用 float 来存储出勤率百分比,它有小数但不需要太高的精度。

当前学期编号存储在 byte 中,因为这是一个小数字,而总科目数存储在 short 中。所有这些信息都通过 System.out.println() 打印出来。这是一个如何在实际生活中使用 Java 基本数据类型的示例。

什么是用户定义数据类型(非原始数据类型)?

非原始数据类型更复杂,有时也称为引用类型。它们不存储实际值,而是存储指向该值的引用的存储位置(基本上是指针)。这些类型由程序员创建,并可根据我们程序的需求进行定制。

阅读更多 Java 中的非原始数据类型

一些非原始数据类型的例子是:

  • String:用于存储文本,如单词或句子。
  • Arrays:用于存储值的列表。
  • Classes:用于创建具有不同属性和行为的对象。
  • Interfaces:用于定义类必须遵循的一组规则。

非原始数据类型的特点

大小可变: 我们使用的内存量不是固定的。它取决于我们指向的数据。

存储引用: 非原始数据类型不直接保存实际值。相反,它们保存一个引用(如指针)来知道实际数据存储在内存中的位置。

内置工具: 非原始类型附带了有用的方法(或函数),使我们能够更轻松地处理数据——例如,转换 String 中的文本或访问 Array 中的项。

高效: 非原始数据类型是高效的,并且可以存储更复杂的数据结构,如对象和数组。

示例:非原始数据类型的使用

示例

编译并运行

输出

Library Book List:

Title: The Shadow Lines
Author: Amitav Ghosh

Title: Wings of Fire
Author: A.P.J. Abdul Kalam

Title: To Kill a Mockingbird
Author: Harper Lee

解释

在上面的程序中,我们创建了一个简单的系统来存储和显示书籍详情,使用了一个名为 Book 的自定义类。每本书都有一个标题和一个作者,两者都使用 String 类型存储。我们创建了一个 Book 对象数组来保存多本书。

然后,我们使用循环遍历数组,并通过类中的方法打印出每本书的详细信息。这个例子展示了如何将字符串、数组和对象等非原始数据类型结合起来,以一种清晰有序的方式管理和显示数据。

原始数据类型与非原始数据类型

方面原始数据类型非原始数据类型
定义这是 Java 定义的基本数据类型。这是用户或 Java 的内置类定义的更复杂的数据类型。
存储它直接在内存中存储数据。它存储数据的引用(内存地址)。
大小它的大小是固定的。它的大小是动态的(取决于对象或数组)。
默认值它有默认值。默认值为 null。
内存效率它效率更高。效率较低(由于引用)。
方法它没有方法或属性。它有方法和属性(例如 String)。
不可变性它是不可变的(一旦声明就不能更改)它是可变的(一旦声明就可以更改值)。
性能由于直接存储值,因此性能更快。由于存储引用,性能较慢。
Null 检查它不能为 null。它可以为 null。
示例int, char, boolean, float, double 等。String, 数组, 接口, 对象, 类等。

何时使用原始数据类型?

  • 当我们只需要数字、字符或真/假条件等基本值时。
  • 当我们寻求更高的内存效率和更快的性能时。
  • 当我们只需要存储一个小的、固定大小的数据(如整数、浮点数等)时。
  • 当我们不需要对数据执行复杂操作时。

何时使用非原始数据类型?

  • 当我们想要存储复杂数据时,例如对象、字符串或大量数据集合。
  • 当我们希望通过方法灵活地修改和交互数据时。
  • 当我们处理大型或动态变化的数据时(例如,大小未知的数组)。
  • 当我们想要在一个变量中存储多个值时,例如数组或类。

结论

学习原始数据类型和非原始数据类型的区别是学习 Java 的基础但重要的一部分。原始类型简单、快速,并且内置于语言中——非常适合存储数字或真/假答案等小值。非原始类型,如字符串、数组和对象,功能更强大、更灵活,并且可以帮助我们处理更详细或更复杂的数据。

在编写 Java 程序时,这两种类型都很重要。知道何时使用哪种类型将使我们的代码更清晰、更快、易于理解。

原始数据类型和非原始数据类型选择题

1. Java 中有多少种原始数据类型?

  1. 9
  2. 10
  3. 8
  4. 6
 

答案: C)

解释: Java 有八种原始数据类型:byte、short、int、long、float、double、char 和 boolean。


2. 下列哪项不是原始数据类型?

  1. int
  2. float
  3. Array
  4. Boolean
 

答案: C)

解释: 非原始类型指的是对象组,如 String、Array 或各种自定义类。


3. 非原始数据类型也称为 _____________。

  1. 引用数据类型
  2. 原始数据类型
  3. 预定义数据类型
  4. 以上都不是
 

答案: A

解释: 每当定义一个非原始数据类型时,它就指向一个内存位置,其中数据存储在堆内存中,即它指向对象所在的内存位置。因此,非原始数据类型变量也称为引用数据类型。


4. 下列哪项不是非原始数据类型?

  1. Interface
  2. Enums
  3. String
  4. boolean
 

答案: D

解释: 非原始数据类型在 Java 中也称为引用类型。一些非原始数据类型包括接口、枚举、数组、字符串、类。布尔值是一种原始数据类型,因为它存储值而不是引用。


5. 下列哪种数据类型适合在一个变量中存储相同类型的值?

  1. 数组
  2. Enums
  3. String
  4. Class
 

答案: A

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