Java 数据类型(基本类型)
Java 是一门强类型语言,每个变量都必须有明确的数据类型。理解 Java 的数据类型是编写正确程序的基础。本章将详细介绍 Java 的基本数据类型及其使用。
基本数据类型
Java 有 8 种基本数据类型(Primitive Types),它们不是对象,直接存储在栈内存中,性能较高。
整数类型
int(整型)
- 大小:32 位(4 字节)
- 取值范围:-2³¹ 到 2³¹-1(-2,147,483,648 到 2,147,483,647)
- 默认值:0
- 最常用:日常开发中最常用的整数类型
int age = 25;
int count = 100;
int maxValue = Integer.MAX_VALUE; // 2,147,483,647
int minValue = Integer.MIN_VALUE; // -2,147,483,648
long(长整型)
- 大小:64 位(8 字节)
- 取值范围:-2⁶³ 到 2⁶³-1
- 默认值:0L
- 使用场景:需要存储更大的整数
long population = 8000000000L; // 注意:需要加 L 后缀
long timestamp = System.currentTimeMillis();
long maxLong = Long.MAX_VALUE; // 9,223,372,036,854,775,807
注意:long 类型字面量需要加 L 或 l 后缀(推荐使用大写 L,避免与数字 1 混淆)
byte(字节型)
- 大小:8 位(1 字节)
- 取值范围:-128 到 127
- 默认值:0
- 使用场景:处理二进制数据、网络编程
byte b = 100;
byte minByte = Byte.MIN_VALUE; // -128
byte maxByte = Byte.MAX_VALUE; // 127
short(短整型)
- 大小:16 位(2 字节)
- 取值范围:-32,768 到 32,767
- 默认值:0
- 使用场景:节省内存(现在较少使用)
short year = 2024;
short minShort = Short.MIN_VALUE; // -32,768
short maxShort = Short.MAX_VALUE; // 32,767
浮点类型
float(单精度浮点型)
- 大小:32 位(4 字节)
- 精度:约 7 位有效数字
- 取值范围:约 ±3.4 × 10³⁸
- 默认值:0.0f
- 使用场景:对精度要求不高的浮点数
float price = 99.99f; // 注意:需要加 f 后缀
float pi = 3.14159f;
float maxFloat = Float.MAX_VALUE;
注意:float 类型字面量需要加 f 或 F 后缀
double(双精度浮点型)
- 大小:64 位(8 字节)
- 精度:约 15-17 位有效数字
- 取值范围:约 ±1.7 × 10³⁰⁸
- 默认值:0.0
- 最常用:日常开发中最常用的浮点类型
double height = 175.5; // 默认是 double,不需要后缀
double weight = 70.5;
double pi = 3.141592653589793;
double maxDouble = Double.MAX_VALUE;
字符类型
char(字符型)
- 大小:16 位(2 字节)
- 取值范围:Unicode 字符(0 到 65,535)
- 默认值:'\u0000'(空字符)
- 使用场景:存储单个字符
char grade = 'A';
char chinese = '中';
char unicode = '\u0041'; // 'A'
char newline = '\n'; // 换行符
char tab = '\t'; // 制表符
注意:
- 使用单引号
''表示字符 - 可以存储 Unicode 字符
- 可以表示转义字符
布尔类型
boolean(布尔型)
- 大小:JVM 实现相关(通常 1 位或 1 字节)
- 取值:
true或false - 默认值:false
- 使用场景:条件判断、逻辑运算
boolean isActive = true;
boolean isEmpty = false;
boolean result = (10 > 5); // true
注意:Java 中的 boolean 不能转换为数字(与 C/C++ 不同)
数据类型大小与取值范围
完整对比表
| 类型 | 大小 | 取值范围 | 默认值 | 包装类 |
|---|---|---|---|---|
| byte | 8 位 | -128 到 127 | 0 | Byte |
| short | 16 位 | -32,768 到 32,767 | 0 | Short |
| int | 32 位 | -2³¹ 到 2³¹-1 | 0 | Integer |
| long | 64 位 | -2⁶³ 到 2⁶³-1 | 0L | Long |
| float | 32 位 | ±3.4 × 10³⁸ | 0.0f | Float |
| double | 64 位 | ±1.7 × 10³⁰⁸ | 0.0 | Double |
| char | 16 位 | 0 到 65,535 | '\u0000' | Character |
| boolean | 1 位/1 字节 | true / false | false | Boolean |
获取取值范围
// 整数类型
System.out.println("byte: " + Byte.MIN_VALUE + " 到 " + Byte.MAX_VALUE);
System.out.println("short: " + Short.MIN_VALUE + " 到 " + Short.MAX_VALUE);
System.out.println("int: " + Integer.MIN_VALUE + " 到 " + Integer.MAX_VALUE);
System.out.println("long: " + Long.MIN_VALUE + " 到 " + Long.MAX_VALUE);
// 浮点类型
System.out.println("float: " + Float.MIN_VALUE + " 到 " + Float.MAX_VALUE);
System.out.println("double: " + Double.MIN_VALUE + " 到 " + Double.MAX_VALUE);
类型转换(自动类型转换、强制类型转换)
自动类型转换(隐式转换)
规则:从小类型自动转换为大类型,不会丢失精度
转换方向:
byte → short → int → long → float → double
↑
char
示例
// int 自动转换为 long
int a = 100;
long b = a; // 自动转换
// int 自动转换为 double
int x = 10;
double y = x; // 自动转换为 10.0
// char 自动转换为 int
char ch = 'A';
int code = ch; // 自动转换为 65(ASCII 码)
// float 自动转换为 double
float f = 3.14f;
double d = f; // 自动转换
强制类型转换(显式转换)
规则:从大类型转换为小类型,需要显式转换,可能丢失精度
语法:(目标类型) 值
示例
// double 强制转换为 int(丢失小数部分)
double d = 3.14;
int i = (int) d; // i = 3
// long 强制转换为 int(可能溢出)
long l = 3000000000L;
int i = (int) l; // 可能溢出
// int 强制转换为 byte(可能溢出)
int x = 200;
byte b = (byte) x; // b = -56(溢出)
// char 和 int 相互转换
char ch = 'A';
int code = (int) ch; // code = 65
char ch2 = (char) 65; // ch2 = 'A'
类型转换注意事项
1. 精度丢失
// 浮点数转整数,丢失小数部分
double d = 9.99;
int i = (int) d; // i = 9,丢失 0.99
// 大整数转小整数,可能溢出
long l = 3000000000L;
int i = (int) l; // 溢出,结果不正确