在Java中,常见的数据类型可以分为两大类:基本数据类型 (Primitive Data Types)和引用数据类型(Reference Data Types)。下面是对这些数据类型的介绍:
1. 基本数据类型(Primitive Data Types)
Java 提供了 8 种基本数据类型,这些类型的变量直接存储值,不需要额外的内存引用。
数据类型 | 说明 | 默认值 | 范围 |
---|---|---|---|
byte | 8 位整数类型 | 0 | -128 到 127 |
short | 16 位整数类型 | 0 | -32,768 到 32,767 |
int | 32 位整数类型 | 0 | -2^31 到 2^31 - 1 |
long | 64 位整数类型 | 0L | -2^63 到 2^63 - 1 |
float | 32 位浮动精度类型 | 0.0f | 单精度浮点数,约为 ±3.40282347E+38F(6-7位有效数字) |
double | 64 位浮动精度类型 | 0.0d | 双精度浮点数,约为 ±1.7976931348623157E+308(15-16位有效数字) |
char | 16 位 Unicode 字符类型 | '\u0000'(空字符) | 0 到 65535(即 Unicode 编码范围) |
boolean | 布尔类型 | false | true 或 false |
1.1 byte
- 大小:1 字节(8 位)
- 范围:-128 到 127
- 默认值:0
- 说明:byte 类型适用于节省内存空间的数据,通常用于存储大量数据的场景。它适合存储二进制数据或需要小范围整数的应用。
java
byte a = 100; // 合法的byte值
1.2 short
- 大小:2 字节(16 位)
- 范围:-32,768 到 32,767
- 默认值:0
- 说明:short 类型可以存储范围比 byte 更大的整数,适用于需要在比 byte 更大的范围内存储整数但又不需要 int存储空间的情况。
java
short b = 30000; // 合法的short值
1.3 int
- 大小:4 字节(32 位)
- 范围:-2^31 到 2^31 - 1,即 -2,147,483,648 到 2,147,483,647
- 默认值:0
- 说明:int 是 Java 中最常用的整数类型,通常用于处理大部分整数运算。它足够大,用于存储大部分日常的整数值。
java
int c = 123456; // 合法的int值
1.4 long
- 大小:8 字节(64 位)
- 范围:-2^63 到 2^63 - 1
- 默认值:0L
- 说明:long 类型用于存储非常大的整数值。适用于超出 int 范围的整数,比如文件大小、时间戳等大数值计算。
java
long d = 1234567890L; // 使用L后缀来表示long值
1.5 float
- 大小:4 字节(32 位)
- 范围:大约 ±3.40282347E+38F(6-7位有效数字)
- 默认值:0.0f
- 说明:float 类型用于存储单精度浮动点数。它用于需要小范围浮点数计算的场景,比如图形学、简单科学计算等。
java
float e = 3.14f; // 使用f后缀来表示float值
1.6 double
- 大小:8 字节(64 位)
- 范围:大约 ±1.7976931348623157E+308(15-16位有效数字)
- 默认值:0.0d
- 说明:double 类型是 Java 中最常用的浮动点类型,通常用于科学计算、金融计算等需要较高精度的场合。
java
double f = 3.14159; // 合法的double值
1.7 char
- 大小:2 字节(16 位)
- 范围:0 到 65535(Unicode字符集范围)
- 默认值:\u0000(空字符)
- 说明:char 类型用于存储单个字符。它是一个无符号整数类型,可以表示 Unicode 字符集中的任何字符。
java
char g = 'A'; // 合法的char值
1.8 boolean
- 大小:1 位(虽然它的实际占用空间可能会根据 JVM 实现有所不同)
- 范围:true 或 false
- 默认值:false
- 说明:boolean 类型用于存储布尔值,通常用于条件判断和控制流语句(如 if、while、for)。
java
boolean h = true; // 合法的boolean值
二、引用数据类型(Reference Data Types)
引用数据类型用于存储对象的地址或引用,它们指向堆内存中的对象。引用数据类型并不像基本数据类型那样存储具体的值,而是存储一个指向对象的引用。常见的引用数据类型有类、接口、数组、枚举等。
2.1.类(Class)
Java 中几乎所有的自定义对象都是类的实例。类是一个用户定义的数据类型,它可以包含字段(属性)和方法。
java
class Person {
String name;
int age;
void sayHello() {
System.out.println("Hello, my name is " + name);
}
}
Person p = new Person(); // 创建一个Person对象
p.name = "Alice";
p.age = 25;
p.sayHello();
2.2 接口(Interface)
接口是一个特殊的类,它只包含方法的声明,而没有方法的实现。接口用于定义类之间的行为约定(即类应当提供哪些方法)。
java
interface Animal {
void eat();
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog is eating");
}
}
2.3 数组(Array)
数组是一种存储多个相同类型元素的数据结构。数组是引用类型,存储的是数组对象的引用。
java
int[] arr = {1, 2, 3}; // 创建一个整数数组
String[] names = {"Alice", "Bob", "Charlie"}; // 创建一个字符串数组
2.4 枚举(Enum)
枚举类型用于定义一组常量,通常用于有限且预定义的值的集合。
java
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY; // 使用枚举值
2.5 字符串(String)
尽管字符串本质上是字符的数组,但在 Java 中,String 是一个特殊的类。String 在 Java 中是不可变的,即一旦创建了一个字符串对象,它的内容就不能改变。
java
String greeting = "Hello, World!";
三、基本数据类型与引用数据类型的区别
特性 | 基本数据类型(Primitive) | 引用数据类型(Reference) |
---|---|---|
存储内容 | 存储数据的实际值 | 存储对象的内存地址(引用) |
默认值 | 每种类型有其固定的默认值 | 默认值为 null(即没有引用任何对象) |
存储位置 | 存储在栈内存中 | 存储在堆内存中 |
内存分配 | 内存分配简单 | 内存分配相对复杂,需要动态分配 |
是否可变 | 不可变(例如:int、boolean 等) | 可变(例如:String 类的对象是不可变的,但其他对象通常是可变的) |
示例 | int、char、boolean | String、数组、对象等 |