基本数据类型
本教程共 100 篇 · 第 11 篇 · 更新于 2026-08-05 · 约 5 分钟阅读
本节目标:搞清楚 Java 有哪些内置的基本数据类型,各自占多大内存、能存多大范围,以及写字面量时的各种小写法。
先声明,再用
Java 是静态类型语言。这句话的意思是:每个变量在用之前,必须先说清楚它是什么类型。
比如你要存一个整数,得先写 int age;,告诉编译器「age 是个整数」。之后 age 里就只能装整数,塞别的东西编译器不让。
这种「类型先行」的设计,能在写代码阶段就拦下一大批错误。代价是你得多打几个字,但换来的是稳。
除了 8 种下面要讲的基本类型,Java 还有一类引用类型(比如 String、数组、你自己写的类)。两者最大的区别:基本类型直接存值,引用类型存的是「指向对象的地址」。本章只聊基本类型。
八种基本类型一览
Java 内置了 8 种基本数据类型,分成四类:
| 类别 | 类型 | 位数 | 取值范围 |
|---|---|---|---|
| 整数 | byte | 8 位 | -128 ~ 127 |
| 整数 | short | 16 位 | -32768 ~ 32767 |
| 整数 | int | 32 位 | 约 ±21 亿 |
| 整数 | long | 64 位 | 非常大 |
| 浮点 | float | 32 位 | 小数,精度有限 |
| 浮点 | double | 64 位 | 小数,默认用这个 |
| 字符 | char | 16 位 | 单个 Unicode 字符 |
| 布尔 | boolean | 1 位 | true / false |
日常写业务,int 和 double 用得最多。long 在数量很大(如时间戳、文件大小)时才上。byte、short 多在省内存的数组里出现,初学基本碰不到。
整数类型怎么写
byte b = 100;
short s = 10000;
int i = 100000;
long n = 10000000000L; // 注意末尾的 L
long 类型的字面量必须在数字后加 L(推荐大写,小写 l 容易和 1 看混)。不加的话,数字默认是 int,超过 int 范围就报错。
Warning忘了给
long加L是新手高频错误。比如long x = 3000000000;(30 亿超过 int 上限约 21 亿)会直接编译报错。补上L即可。
浮点类型怎么写
带小数点的数默认是 double。要表示 float,得在数字后加 F:
double d = 3.14; // 默认就是 double
float f = 3.14F; // 必须加 F,否则类型不匹配
Note浮点数不能用来精确表示钱。比如
0.1 + 0.2在浮点里并不严格等于0.3。涉及金额要用java.math.BigDecimal。这是后面会专门讲的内容,现在先记住「别用 float/double 算钱」。
字符 char 与布尔 boolean
char 存单个字符,用单引号包起来:
char c = 'A';
char zh = '中';
Java 的 char 是 16 位 Unicode,所以一个汉字也能直接存。
boolean 只有两个值,用来表示「真 / 假」:
boolean isOpen = true;
boolean loggedIn = false;
它常用于条件判断。注意 Java 里 boolean 不能当成 0 或 1 用——if (1) 这种写法在 Java 是非法的,必须写成 if (flag)。
两个容易忽略的点
char 骨子里是个数字。 它存的其实是对应的 Unicode 编码值,所以能直接参与数学运算:
char c = 'A'; // 'A' 的编码是 65
c = (char) (c + 1); // 65 + 1 = 66,对应 'B'
System.out.println(c); // 输出 B
大写字母 AZ 的编码是连续的 6590,所以这段能顺推到下一个字母。做这种运算时 char 会先提升成 int,加完还得强转回 char。
boolean 不能和其他类型互转。 很多语言里 0 代表假、非 0 代表真,但 Java 不行。boolean 就是独立的类型,既不能把 int 赋给 boolean,也不能把 boolean 当数字用。这是故意设计成这样,避免把「真假」和「数字」混为一谈的坑。
字面量的花样写法
数字字面量不止一种写法,掌握几个常用的就够。
十六进制加 0x 前缀,二进制加 0b 前缀(Java 7 引入):
int dec = 26; // 十进制 26
int hex = 0x1a; // 十六进制,等于 26
int bin = 0b11010; // 二进制,等于 26
科学计数法用 e:
double d = 1.234e2; // 等于 123.4
下划线分隔(Java 7 引入),让长数字更好读,编译器会忽略:
long card = 1234_5678_9012_3456L;
int bits = 0b1010_1100;
Tip下划线只能放在数字之间,不能开头、结尾,也不能紧贴小数点或
L/F后缀。写长数字时善用下划线,可读性提升明显。
默认值的小差别
如果你声明一个字段(类的成员变量)却没给初值,编译器会给它一个默认值:数字类型是 0,boolean 是 false,char 是 \u0000。
但局部变量(方法里声明的)没有默认值。不赋值就用,编译器直接报错。
public class DefaultDemo {
int fieldAge; // 字段,默认 0
public void test() {
int localAge; // 局部变量
// System.out.println(localAge); // 报错:可能尚未初始化
}
}
到底该用哪个类型
面对这么多类型,初学最容易纠结「我该选哪个」。给个简单决策:
- 存整数,默认用
int;数字特别大(如毫秒时间戳)才上long。 - 存小数,默认用
double。除非你明确知道在做什么,否则别碰float。 - 存单个字符用
char;存一段文字用String(引用类型,后面讲)。 - 存真假用
boolean。 byte、short基本只在「超多数据、要省内存的数组」里才出现,初学阶段可以忽略。
记住:先用 int 和 double 打天下,其它的等真遇到场景再说。类型选错大不了改一行,不必在开始就过度纠结。
Note本章的 8 种基本类型都不是对象。Java 里还有一套对应的「包装类型」(如
Integer对应int、Double对应double),用于在需要对象的场合使用。它们到后面讲集合、泛型时会出现,现在你只需知道「基本类型存值、轻量高效」就够了。
小结
Java 是静态类型语言,变量必须先声明类型。8 种基本类型分整数、浮点、字符、布尔四类。
long 字面量加 L,float 字面量加 F;浮点别用于金额计算。
字面量支持十六进制 0x、二进制 0b、科学计数 e、下划线分隔。字段有默认值,局部变量必须显式初始化。