一、开篇:为什么要学数据类型?
Java 是强类型语言,这意味着:
- 每一个变量都必须先声明类型,才能使用
- 不同类型的数据,占用内存大小、取值范围、运算规则都不同
就像我们装东西要选不同容器:水用杯子、书用书架,Java 里的数据也要用对应类型来'装'。
Java 一共提供了 8 种基本数据类型,分为 4 大类:
- 整数类型(存整数)
- 浮点类型(存小数)
- 字符类型(存单个字符)
- 布尔类型(存逻辑真/假)
⚠️ 注意:(字符串)不属于基本类型,它是引用类型,但日常开发中高频使用,本文也会单独讲解。
本文详解 Java 8 种基本数据类型,包括整数(byte, short, int, long)、浮点(float, double)、字符(char)和布尔(boolean)。说明了各类型的内存占用、取值范围及书写规范,强调 String 为引用类型。涵盖自动与强制类型转换规则,并附带高频面试题及答案,帮助初学者掌握核心考点及面试准备。
Java 是强类型语言,这意味着:
就像我们装东西要选不同容器:水用杯子、书用书架,Java 里的数据也要用对应类型来'装'。
Java 一共提供了 8 种基本数据类型,分为 4 大类:
⚠️ 注意:(字符串)不属于基本类型,它是引用类型,但日常开发中高频使用,本文也会单独讲解。
String整数类型共有 4 种,区别在于占用内存大小和取值范围:
| 类型名 | 占用字节 | 取值范围 | 写法示例 | 核心特点 |
|---|---|---|---|---|
byte | 1 字节 | -128 ~ 127 | byte num = 20; | 占空间最小,适合存状态标记、小范围数字 |
short | 2 字节 | -32768 ~ 32767 | short num = 30; | 很少使用,仅在兼容老代码时出现 |
int | 4 字节 | -2^31 ~ 2^31-1 | int num = 10; | 最常用,Java 默认整数类型,日常开发首选 |
long | 8 字节 | -2^63 ~ 2^63-1 | long num = 40L; | 存超大整数,必须在数字后加 L(推荐大写,避免和 1 混淆) |
// 整数类型演示
byte numByte = 20;
short numShort = 30;
int numInt = 10; // 最常用
long numLong = 40L; // 必须加 L 后缀
System.out.println(numByte);
System.out.println(numShort);
System.out.println(numInt);
System.out.println(numLong);
浮点类型用于存储小数,分为 2 种,区别在于精度:
| 类型名 | 占用字节 | 有效精度 | 写法示例 | 核心特点 |
|---|---|---|---|---|
float | 4 字节 | 约 6~7 位有效数字 | float num = 10.1F; | 单精度,必须在数字后加 F,精度较低 |
double | 8 字节 | 约 15~16 位有效数字 | double num = 3.1415926535; | 最常用,双精度,Java 默认小数类型,精度更高 |
浮点数存在精度误差,比如 0.1 + 0.2 结果不是精确的 0.3,因此:
java.math.BigDecimal 类// 浮点类型演示
float numFloat = 10.1F; // 必须加 F 后缀
double numDouble = 3.1415926535; // 最常用
System.out.println(numFloat);
System.out.println(numDouble);
// 精度误差演示
System.out.println(0.1+0.2); // 输出 0.30000000000000004,而非 0.3
| 类型名 | 占用字节 | 取值范围 | 写法示例 | 核心特点 |
|---|---|---|---|---|
char | 2 字节 | 0 ~ 65535(Unicode 编码范围) | char c = '名'; | 用单引号包裹,只能存单个字符,支持中文、英文、符号、表情等 |
✅ 小知识:
char本质上是一个 16 位无符号整数,对应 Unicode 编码表中的数字,比如'A'对应数字65。
// 字符类型演示
char nameChar = '名'; // 单引号,单个字符
char engChar = 'A';
char symbolChar = '@';
System.out.println(nameChar);
System.out.println(engChar);
System.out.println(symbolChar);
// char 转数字演示
System.out.println((int)engChar); // 输出 65('A' 对应的 Unicode 编码)
| 类型名 | 占用字节 | 取值范围 | 写法示例 | 核心特点 |
|---|---|---|---|---|
boolean | 无固定字节(JVM 优化) | 只有 true / false | boolean flag = true; | 用于逻辑判断(如 if/while 条件),不能用 0/1 代替,和 C 语言不同 |
// 布尔类型演示
boolean isTrue = true;
boolean isFalse = false;
System.out.println(isTrue);
System.out.println(isFalse);
// 逻辑判断演示
if(isTrue){
System.out.println("条件成立");
}
虽然 String 不属于 8 大基本类型,但它是 Java 开发中最常用的类型,必须掌握:
| 类型名 | 类型分类 | 写法示例 | 核心特点 |
|---|---|---|---|
String | 引用类型 | String name = "名字"; | 用双引号包裹,可以存多个字符,支持中文、英文、数字、符号等任意文本 |
// 字符串类型演示
String nameStr = "我的名字叫 Java";
String helloStr = "Hello World!";
System.out.println(nameStr);
System.out.println(helloStr);
// 字符串拼接
String combineStr = nameStr + " - " + helloStr;
System.out.println(combineStr);
Java 是强类型语言,不同类型数据运算时,需要进行类型转换,分为两种:
示例:
int a = 10;
double b = a; // 自动将 int 转换为 double,结果为 10.0
转换方向:
byte, short, char → int → long → float → double
(目标类型) 语法示例:
double a = 10.5;
int b = (int)a; // 强制将 double 转换为 int,结果为 10(丢失小数部分)
⚠️ 警告:强制转换需谨慎,仅在明确知道不会丢失关键数据时使用!
| 类别 | 类型 | 关键字 | 后缀要求 | 常用度 |
|---|---|---|---|---|
| 整数 | 字节型 | byte | 无 | ⭐⭐ |
| 整数 | 短整型 | short | 无 | ⭐ |
| 整数 | 整型 | int | 无 | ⭐⭐⭐⭐⭐ |
| 整数 | 长整型 | long | 必须加 L | ⭐⭐⭐ |
| 浮点 | 单精度 | float | 必须加 F | ⭐⭐ |
| 浮点 | 双精度 | double | 无 | ⭐⭐⭐⭐⭐ |
| 字符 | 字符型 | char | 无 | ⭐⭐⭐ |
| 布尔 | 布尔型 | boolean | 无 | ⭐⭐⭐⭐ |
| 引用 | 字符串 | String | 无 | ⭐⭐⭐⭐⭐ |
public class BasicTypeDemo {
public static void main(String[] args) {
// 1. 整数类型
byte numByte = 20;
short numShort = 30;
int numInt = 10;
long numLong = 40L;
// 2. 浮点类型
float numFloat = 10.1F;
double numDouble = 3.1415926535;
// 3. 字符类型
char nameChar = '名';
// 4. 布尔类型
boolean flag = true;
// 5. 字符串类型(引用类型)
String nameStr = "名字";
// 打印输出
System.out.println("byte: " + numByte);
System.out.println("short: " + numShort);
System.out.println("int: " + numInt);
System.out.println("long: " + numLong);
System.out.println("float: " + numFloat);
System.out.println("double: " + numDouble);
System.out.println("char: " + nameChar);
System.out.println("boolean: " + flag);
System.out.println("String: " + nameStr);
}
}
标准答案:
byte(1 字节)、short(2 字节)、int(4 字节)、long(8 字节)float(4 字节)、double(8 字节)char(2 字节)boolean(无固定字节,JVM 优化存储)long num = 10; 和 long num = 10L; 有区别吗?标准答案:
有区别。10 是 int 类型常量,long num = 10; 会先将 int 类型的 10 自动转换为 long 类型;10L 直接是 long 类型常量,无需转换。
int 范围(如 10000000000),必须加 L,否则编译报错;L,明确类型,避免歧义。标准答案:
Java 中的 float 和 double 是基于 IEEE 754 标准的二进制浮点数,无法精确表示所有十进制小数(如 0.1 转换为二进制是无限循环小数),会产生精度误差。
java.math.BigDecimal 类,通过字符串构造(而非浮点数),保证精度。char 类型可以存储中文吗?为什么?标准答案:
可以。Java 中的 char 是 16 位的 Unicode 编码(UTF-16),Unicode 包含了中文等所有主流语言的字符,因此 char 可以存储单个中文。
boolean 类型的取值有哪些?可以用 0/1 代替吗?标准答案:
boolean 只有 true(真)和 false(假)两个取值,不能用 0/1 代替(和 C/C++ 不同)。
boolean 的存储没有统一规定,通常在局部变量表中用 1 个字节存储,或与其他类型打包优化。标准答案:
int → long);(类型),可能导致溢出或精度丢失(如 double → int)。掌握 8 大基本数据类型是 Java 入门的第一步,后续学习变量、运算、流程控制都离不开它。建议大家亲手敲一遍代码,结合面试题理解核心考点,既能夯实基础,又能应对面试。
String 是引用类型而非基本类型;int/double 是最常用的数值类型,long/float 需加后缀 L/F,布尔类型仅支持 true/false;BigDecimal,类型转换需注意自动转换无风险、强制转换有溢出/精度丢失风险。
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online