Java 数据类型详解
目录
数据类型分类
基本数据类型
整数类型
浮点类型
字符类型
布尔类型
引用数据类型
基本类型 vs 包装类
类型转换
Java 是一种强类型语言,这意味着每个变量和表达式都有明确的类型,并且在编译时就会进行类型检查。了解 Java 的数据类型系统是掌握这门语言的基础。
数据类型分类
Java 中的数据类型可分为两大类:
- 基本数据类型(Primitive Types)
- 引用数据类型(Reference Types)
这种分类的核心区别在于:基本类型存储的是实际值,而引用类型存储的是对象的引用(内存地址)。
基本数据类型
Java 提供了 8 种基本数据类型,用于存储简单的数值和字符:
整数类型
整数类型用于存储没有小数部分的数值:
- byte:8位有符号整数
- 取值范围:-128 到 127
- 占用空间:1字节
- 示例:
byte age = 25;
- short:16位有符号整数
- 取值范围:-32,768 到 32,767
- 占用空间:2字节
- 示例:
short temperature = -5;
- int:32位有符号整数(最常用)
- 取值范围:-231 到 231-1(约-20亿到20亿)
- 占用空间:4字节
- 示例:
int population = 1000000;
- long:64位有符号整数
- 取值范围:-263 到 263-1
- 占用空间:8字节
- 示例:
long distance = 1234567890123L;
(注意结尾的L)
浮点类型
浮点类型用于存储带有小数部分的数值:
- float:32位单精度浮点数
- 取值范围:约 ±3.40282347E+38F
- 占用空间:4字节
- 示例:
float pi = 3.14159f;
(注意结尾的f)
- double:64位双精度浮点数(最常用)
- 取值范围:约 ±1.79769313486231570E+308
- 占用空间:8字节
- 示例:
double gravity = 9.81;
注意:浮点类型可能会有精度损失,不适合用于精确计算(如货币),这时应使用 BigDecimal
类。
字符类型
- char:16位 Unicode 字符
- 取值范围:'\u0000'(0)到 '\uffff'(65,535)
- 占用空间:2字节
- 示例:
char grade = 'A';
或char heart = '\u2764';
布尔类型
- boolean:表示真或假
- 取值范围:
true
或false
- 占用空间:通常1字节(具体由JVM决定)
- 示例:
boolean isActive = true;
- 取值范围:
引用数据类型
引用数据类型指向对象,不直接存储对象的值,而是存储对象的内存地址。Java 中的引用类型包括:
1.类(Class):如 String
、Integer
等
String message = "Hello World";
Date today = new Date();
2.接口(Interface):如 List
、Runnable
等
List<String> names = new ArrayList<>();
3.数组(Array):可以是基本类型数组或对象数组
int[] numbers = {1, 2, 3, 4};
String[] fruits = {"apple", "banana", "cherry"};
4.枚举(Enum):一种特殊的类
enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
Day today = Day.FRIDAY;
5.注解(Annotation):用于提供元数据
@Override
public String toString() { ... }
引用类型的默认值是 null
,表示不指向任何对象。
基本类型 vs 包装类
Java 为每种基本类型都提供了对应的包装类,它们是引用类型:
基本类型 | 包装类 |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
char | Character |
boolean | Boolean |
包装类的主要用途:
- 在需要对象的场景中使用(如集合框架)
- 提供了许多有用的方法(如类型转换)
- 支持 null 值
Java 5 引入了自动装箱(Autoboxing)和自动拆箱(Unboxing)功能,简化了基本类型和包装类之间的转换:
// 自动装箱:int -> Integer
Integer num = 100;// 自动拆箱:Integer -> int
int value = num;
类型转换
Java 中存在两种类型转换:
- 自动类型转换(隐式转换):从范围小的类型转换到范围大的类型
int i = 100;
long l = i; // 自动转换
double d = l; // 自动转换
2.强制类型转换(显式转换):从范围大的类型转换到范围小的类型,可能会导致精度损失
double d = 3.14;
int i = (int) d; // 强制转换,结果为3,小数部分被截断
注意:布尔类型不能与其他任何类型进行转换。