1. 概述
Java 编程语言具有八种数据类型。在本教程中,我们将介绍每种类型。
2. 数据类型
Java 中定义的八个基本类型是 int、byte、short、long、float、double、boolean 和 char。这些不被视为对象,代表原始值。
它们直接存储在堆栈中。
2.1 int
我们要介绍的第一个数据类型是 int。也称为整数,int 类型包含范围广泛的非小数数值。
Java 使用 32 位内存来存储它。换句话说,它可以表示从 -2,147,483,648 (-2^31) 到 2,147,483,647 (2^31-1) 的值。
在 Java 8 中,可以通过使用新的特殊辅助函数来存储最大为 4,294,967,295 (2^32-1) 的无符号整数值。
我们可以简单地声明一个 int:
int x = 424_242;
int y;
在没有赋值的情况下声明的 int 的默认值为 0。如果变量是在方法中定义的,我们必须先赋值才能使用它。
我们可以对整数进行所有标准的算术运算。只是要注意,在对整数进行这些操作时,小数值会被砍掉。
2.2 byte
byte 是一种类似于 int 的数据类型,只是它只占用 8 位内存。这就是我们称之为字节的原因。因为内存太小了,byte只能保存-128(-2^7)到127(2^7-1)的值。
以下是我们如何创建字节:
byte b = 100;
byte empty;
byte 的默认值也是 0。
2.3 short
如果我们想节省内存,而 byte 又太小,我们可以使用 byte 和 int 之间的类型:short。
16 位内存,它是 int 大小的一半,是 byte 大小的两倍。它的值范围是 -32,768(-2^15) 到 32,767(2^15 – 1)。
short s = 20_020;
short s;
与其它类型一样,默认值为 0。
2.4 long
最后一个与整数相关的数据类型是 long。
long 是 int 的大哥。它在内存中占64 位,因此它可以保存更大的值。long的范围-9,223,372,036,854,775,808 (-2^63) 到 9,223,372,036,854,775,807 (2^63 – 1) 之间。
我们可以简单地声明:
long l = 1_234_567_890;
long l;
与其他整数类型一样,默认值也是 0。我们可以在 long 上使用所有适用于 int 的算术。
2.5 float
我们使用浮点类型表示 Java 中的基本小数。这是一个单精度十进制数,如果我们超过了小数点后六位,这个数字就会变得不那么精确,而更像是一个估计值。
在大多数情况下,我们并不关心精度损失。但是如果我们的计算需要绝对的精度(例如,金融操作、登月等),我们需要为这项工作设计特定类型。请查看 Java 类 BigDecimal。
这种类型与 int 一样存储在 32 位内存中。但是,由于是浮点数,它的范围有很大的不同。它可以表示正数和负数。最小的小数是 1.40239846 x 10^-45,最大值是 3.40282347 x 10^38。
定义浮点数与任何其他类型相同:
float f = 3.145f;
float f;
默认值为 0.0 而不是 0。另外,请注意我们将 f 指定添加到文字数字的末尾以定义浮点类型。否则,Java 将抛出错误,因为十进制值的默认类型是double。
我们还可以对float执行所有标准算术运算。然而,重要的是要注意我们执行浮点运算与整数运算不同。
2.6 double
接下来,我们看double。它存储在 64 位内存中。这意味着它代表的数字范围比浮点数大得多,范围是 4.9406564584124654 x 10^324 到 1.7976931348623157 x 10^308。
定义 double 与其他数字类型相同:
double d = 3.13457599923384753929348D;
double d;
与浮点数一样,默认值也是 0.0。与浮点数类似,我们附加字母 D 以指定为双精度数。
2.7 boolean
最简单的数据类型是布尔值。它只能包含两个值:true或false。其值存储在一个bit中。然而,为方便起见,Java 填充该值并将其存储在一个字节中。
定义布尔值的方式:
boolean b = true;
boolean b;
在没有值的情况下声明它默认为 false。布尔值是控制我们的程序流的基石。我们可以对它们使用布尔运算符(例如,and、or 等)。
2.8 char
最后的数据类型是 char。char 也称为字符,是一个 16 位整数,表示 Unicode 编码的字符。它的范围是从 0 到 65,535。在 Unicode 中,表示“\u0000”到“\uffff”。(有关所有的 Unicode 值的列表,请查看 Unicode Table 等网站。)
定义一个字符:
char c = 'a';
char c = 65;
char c;
在定义变量时,我们可以使用任何字符文字,它们会自动转换为我们的 Unicode 编码。字符的默认值为“/u0000”。
2.9 溢出
数据类型有大小限制。但是如果我们尝试存储一个大于最大值的值会发生什么?我们会遇到一种叫做溢出的情况。
当整数溢出时,它会翻转到最小值并从那里开始向上计数。
int i = Integer.MAX_VALUE;
int j = i + 1;
// j will roll over to -2_147_483_648
double d = Double.MAX_VALUE;
double o = d + 1;
// o will be Infinity
Underflow 是同样的问题,只是它涉及存储一个小于最小值的值。
2.10 自动装箱
每个基本数据类型还具有可以包装它的完整 Java 类实现。例如,Integer 类可以包装一个 int。
有时需要从基本类型转换为其对象包装器(例如,将它们与泛型一起使用)。幸运的是,Java 可以自动为我们执行这种转换,这个过程称为自动装箱 (Autoboxing):
Character c = 'c';
Integer i = 1;
3. 总结
在本文中,我们介绍了 Java 支持的八种基本数据类型。 这些是大多数Java 程序使用的构建块,因此非常值得了解它们是如何工作的。