首页 / Java 入门教程 / 基本数据类型

Java 入门教程

基本数据类型

本教程共 100 篇 · 第 11 篇 · 更新于 2026-08-05 · 约 5 分钟阅读

JavaJava 入门教程基本数据类型primitiveintdoublebooleanchar

11. 基本数据类型

本节目标:搞清楚 Java 有哪些内置的基本数据类型,各自占多大内存、能存多大范围,以及写字面量时的各种小写法。

先声明,再用

Java 是静态类型语言。这句话的意思是:每个变量在用之前,必须先说清楚它是什么类型。

比如你要存一个整数,得先写 int age;,告诉编译器「age 是个整数」。之后 age 里就只能装整数,塞别的东西编译器不让。

这种「类型先行」的设计,能在写代码阶段就拦下一大批错误。代价是你得多打几个字,但换来的是稳。

除了 8 种下面要讲的基本类型,Java 还有一类引用类型(比如 String、数组、你自己写的类)。两者最大的区别:基本类型直接存值,引用类型存的是「指向对象的地址」。本章只聊基本类型。

八种基本类型一览

Java 内置了 8 种基本数据类型,分成四类:

类别类型位数取值范围
整数byte8 位-128 ~ 127
整数short16 位-32768 ~ 32767
整数int32 位约 ±21 亿
整数long64 位非常大
浮点float32 位小数,精度有限
浮点double64 位小数,默认用这个
字符char16 位单个 Unicode 字符
布尔boolean1 位true / false

日常写业务,intdouble 用得最多。long 在数量很大(如时间戳、文件大小)时才上。byteshort 多在省内存的数组里出现,初学基本碰不到。

整数类型怎么写

byte b = 100;
short s = 10000;
int i = 100000;
long n = 10000000000L;   // 注意末尾的 L
```bash

`long` 类型的字面量必须在数字后加 `L`(推荐大写,小写 `l` 容易和 `1` 看混)。不加的话,数字默认是 `int`,超过 `int` 范围就报错。

> [!WARNING]
> 忘了给 `long` 加 `L` 是新手高频错误。比如 `long x = 3000000000;`(30 亿超过 int 上限约 21 亿)会直接编译报错。补上 `L` 即可。

## 浮点类型怎么写

带小数点的数默认是 `double`。要表示 `float`,得在数字后加 `F`:

```java
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

Java 的 `char` 是 16 位 Unicode,所以一个汉字也能直接存。

`boolean` 只有两个值,用来表示「真 / 假」:

```java
boolean isOpen = true;
boolean loggedIn = false;

它常用于条件判断。注意 Java 里 boolean 不能当成 01 用——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
```bash

大写字母 A~Z 的编码是连续的 65~90,所以这段能顺推到下一个字母。做这种运算时 `char` 会先提升成 `int`,加完还得强转回 `char`。

**`boolean` 不能和其他类型互转。** 很多语言里 `0` 代表假、非 `0` 代表真,但 Java 不行。`boolean` 就是独立的类型,既不能把 `int` 赋给 `boolean`,也不能把 `boolean` 当数字用。这是故意设计成这样,避免把「真假」和「数字」混为一谈的坑。

## 字面量的花样写法

数字字面量不止一种写法,掌握几个常用的就够。

**十六进制**加 `0x` 前缀,**二进制**加 `0b` 前缀(Java 7 引入):

```java
int dec = 26;       // 十进制 26
int hex = 0x1a;     // 十六进制,等于 26
int bin = 0b11010;  // 二进制,等于 26

科学计数法e

double d = 1.234e2;   // 等于 123.4
```java

**下划线分隔**(Java 7 引入),让长数字更好读,编译器会忽略:

```java
long card = 1234_5678_9012_3456L;
int bits = 0b1010_1100;
Tip

下划线只能放在数字之间,不能开头、结尾,也不能紧贴小数点或 L/F 后缀。写长数字时善用下划线,可读性提升明显。

默认值的小差别

如果你声明一个字段(类的成员变量)却没给初值,编译器会给它一个默认值:数字类型是 0booleanfalsechar\u0000

局部变量(方法里声明的)没有默认值。不赋值就用,编译器直接报错。

public class DefaultDemo {
    int fieldAge;   // 字段,默认 0

    public void test() {
        int localAge;        // 局部变量
        // System.out.println(localAge);  // 报错:可能尚未初始化
    }
}
```bash

## 到底该用哪个类型

面对这么多类型,初学最容易纠结「我该选哪个」。给个简单决策:

- 存整数,默认用 `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`、下划线分隔。字段有默认值,局部变量必须显式初始化。