Java 数据类型详解
一、引言
Java 是一种强类型语言,必须为每一个变量声明一种类型。本文将详细介绍 Java 中的各种数据类型。
二、基本类型概述
Java 一共有 8 种基本类型,包括 4 种整型、2 种浮点类型、1 种字符类型和 1 种布尔类型。
(一)整型
- int(4 字节):示例代码中定义了一个 int 类型变量
w
,值为 2。int w = 2; System.out.println("w:" + w);
- short(2 字节)
- long(8 字节):定义 long 类型变量时,数值后要有一个后缀 L 或 l。例如
long num_l = 1000l;
,输出结果为“num_l:1000”。long num_l = 1000l; System.out.println("num_l:" + num_l);
- byte(1 字节)
(二)浮点类型
-
float(4 字节):float 类型的数值有一个后缀 F 或 f。如
float num_f = 100f;
,输出结果为“num_f:100.0”。float num_f = 100f; System.out.println("num_f:" + num_f);
-
double(8 字节):double 表示的数值精度是 float 类型的两倍。定义时没有后缀的浮点数值默认为 double 类型,也可以添加后缀 D 或 d。例如
double num_d = 100;
,输出结果为“num_d:100.0”。此外,Java 中有三个特殊的浮点数值用于表示溢出和出错情况:
- 正无穷大:
System.out.println(Double.POSITIVE_INFINITY);
- 负无穷大:
System.out.println(Double.NEGATIVE_INFINITY);
- NaN(不是一个数字):注意判断一个值是否为 NaN 不能使用
==
,应该使用Double.isNaN
方法。
- 正无穷大:
(三)字符类型 char(占两个字节)
-
char 类型用于表示单个字符,可以存储 Unicode 字符集中的字符,字面量值要用单引号括起来。
-
char 类型的值可以表示为十六进制值,范围从
\u0000
到\uFFFF
。 -
有一些用于表示特殊字符的转义序列,如
'\u2122'
、'HELLO\n'
。转义序列\u
还可以出现在加引号的字符字面量或字符串之外,例如public static void main(String\u005B\u005D args)
符合语法规则。 -
Unicode 转义序列会在解析代码之前得到处理。建议不要在程序中使用 char 类型,除非确实需要处理 UTF - 16 代码单元,最好将字符串作为抽象数据类型处理。
示例代码中定义了一个 char 类型变量
pi
,值为'\u03c0'
(π)。char pi = '\u03c0'; System.out.println(pi);
(四)布尔类型 boolean
在 Java 中,boolean 类型在内存中占 1 个字节或 4 个字节,具体取决于 Java 虚拟机的实现。boolean 类型有两个值:false 和 true,用来判定逻辑条件。整数和布尔值之间不能相互转换(与 C++不同)。
三、特殊情况说明
-
二进制数:加上前缀 0b 或 0B。例如
int num_bin = 0b111;
,输出结果为“num_bin(0b111):7”。int num_bin = 0b111; System.out.println("num_bin(0b111):" + num_bin);
-
Java 7 开始,可以为数字字面量加下划线,Java 编译器会去掉这些下划线。例如
int num_t = 1_000_000;
,输出结果为“num_t:1000000”。int num_t = 1_000_000; System.out.println("num_t:" + num_t);
-
浮点数运算不精确:这种舍入误差的主要原因是浮点数值采用二进制系统表示,而在二进制系统中无法精确表示分数 1/10,就好像十进制无法精确表示分数 1/3 一样。如果在数值计算中不允许有任何舍入误差,就应该使用
BigDecimal
类。例如System.out.println("2.0 - 1.9:" + (2.0 - 1.9));
输出结果为“0.10000000000000009”。System.out.println("2.0 - 1.9:" + (2.0 - 1.9)); double sum = 0; for (int i = 0; i < 10; i++) { sum += 0.1; } System.out.println("sum(10 * 0.1):" + sum);
-
\u0022
会在解析之前转换为"
,这就会得到"" + ""
,也就是一个空串。例如System.out.println("\u0022+\u0022");
输出结果为空串。
四、总结
Java 的数据类型具有明确的定义和特点,了解这些数据类型对于编写正确、高效的 Java 程序至关重要。在实际编程中,应根据具体需求选择合适的数据类型,并注意各种类型的特殊情况和限制。