Java 中的原始数据类型与对象数据类型的区别

10 Sept 2024 | 5 分钟阅读

Java 原始数据类型

Java 中的原始数据类型是数据操作的基础。它们是 Java 语言中最基本的数据类型。Java 是一种静态类型编程语言,这意味着所有变量在使用前都必须声明。

原始数据类型允许在一个特定位置只存储一个值。它们在 Java 语言中是预定义的,并占用固定的内存量。

Java 编程语言支持的八种原始数据类型,可以分为四类:整数、浮点数、字符和布尔值。

  1. byte: 8 位有符号二进制补码整数,取值范围为 -128 到 127。
  2. short: 16 位有符号二进制补码整数,取值范围为 -32,768 到 32,767。
  3. int: 32 位有符号二进制补码整数,取值范围约为 -21 亿到 21 亿。
  4. long: 64 位无符号(Java SE 8 及更高版本)二进制补码整数,可以存储非常大的整数值。当需要处理极其大的数字时,通常会使用它。
  5. float: 单精度 32 位 IEEE 754 浮点数。它可以表示高精度的十进制值。通常用于数字和分数部分。
  6. double: 双精度 64 位 IEEE 754 浮点数。常用于浮点数计算。
  7. boolean: 用于表示 true 或 false 值。这是最简单的数据类型,只有两个可能的值:true 和 false。
  8. char: 单个 16 位 Unicode 字符。它可以存储单个字符,如字母、数字或符号。

PrimitiveType.java

输出

smallNumber: 10
smallInteger: 1000
integer: 1000000
bigInteger: 10000000000
decimalNumber: 3.14
bigDecimal: 123.456789
character: A
isJavaFun: true
isProgrammingHard: false

数据类型大小范围指数
byte8 位有符号 (1 字节)-128 至 127-27 到 27 - 1
short16 位有符号 (2 字节)-32,768 至 32,767-215 到 215 - 1
int32 位有符号 (4 字节)-2,147,483,648 到 2,147,483,647-231 到 231 - 1
long64 位有符号 (8 字节)-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807-263 到 263 - 1
char16 位 (2 字节)'\u0000' 到 '\uffff'
float32 位 (4 字节)32 位 IEEE 754 浮点数
double64 位 (8 字节)64 位 IEEE 754 浮点数
boolean真和假

原始数据类型的默认值

声明字段时并非总是需要为其赋值。声明但未初始化的字段将由编译器设置为合理默认值。总的来说,根据数据类型,此默认值将为零或 null。然而,依赖此类默认值通常被认为是不好的编程风格。

数据类型默认值
byte0
short0
int0
long0L
float0.0f
double0.0d
char'\u0000'
String (对于任何对象)null
booleanfalse

使用原始数据类型在内存使用和性能方面都很高效,因为它们不是对象,而是直接存储在内存中。局部变量略有不同;编译器从不为未初始化的局部变量分配默认值。如果我们无法在声明局部变量的地方对其进行初始化,请确保在使用它之前为其赋值。访问未初始化的局部变量将导致编译时错误。

Java 中的对象数据类型

它们也被称为非原始数据类型或引用数据类型。之所以这样称呼,是因为它们引用任何特定的对象。与原始数据类型不同,非原始数据类型是由 Java 用户创建的。

对象数据类型可用于存储比原始数据类型更复杂的数据。例如,一个类可以存储一个人的数据,例如姓名、年龄和地址。字符串可以存储文本,例如句子或段落。数组可以存储数据集合,例如数字列表或字符串列表。

当引用变量被存储时,变量会存储在栈中,而原始对象会存储在堆中。在对象数据类型中,虽然会创建两个副本,但它们都会指向堆中的同一个变量,因此对任何变量的更改都会反映在两个变量中。

对象数据类型的示例

类、接口、字符串、数组、集合。

对象数据类型的默认值

在 Java 中,对于对象数据类型(引用类型),默认值始终为 null。这意味着当你声明一个对象数据类型的变量(例如,类或接口)时,它在分配实际对象实例之前没有有意义的值。

原始数据类型与对象数据类型之间的区别

方面原始数据类型对象数据类型
类型它代表简单值。代表对象和复杂数据结构
声明它直接声明(例如,int、boolean、double)使用类名声明(例如,String、Integer、Double)
默认值它有默认值(例如,int 为 0,boolean 为 false)其默认值为 null。
内存消耗通常,它的内存占用较少。由于对象开销,它倾向于占用更多内存。
不可变它是可变的(final 变量除外)。它是不可变的(值不能更改)。
Null 检查它不能包含 null。它可以包含 null。
性能由于内存占用较小,通常比对象数据类型更快。由于对象开销和潜在的垃圾回收,可能会变慢。
类型转换它会自动将一种数据类型转换为另一种。例如,从 int 到 double。需要显式转换。
附加方法没有附加方法或操作。它可能有特定于对象类的类方法和操作。
数组它可以创建原始类型数组(例如,int[])它可以创建对象数组。例如,String[]。
包装类原始类型没有包装类。存在包装类(例如,int 的 Integer,boolean 的 Boolean)。
示例int num = 5;String text = "Hello";