源本科技 | 码上会

Java 数据类型

2025/12/24
63
0

学习目标

通过本课,你将掌握以下核心内容:

  • 理解 Java 是静态类型语言,变量类型在编译时确定

  • 掌握 8 种基本数据类型的用途、范围与内存占用

  • 区分基本类型引用类型的本质差异

  • 熟悉常见引用类型:String、类、对象、接口、数组

  • 能根据场景选择合适的数据类型,避免溢出或精度问题


Java 是静态类型语言

Java 在编译阶段就检查变量类型。这意味着:

int x = "Hello"; // ❌ 编译错误!不能将字符串赋值给 int

✅ 类型安全由编译器保障,减少运行时错误。


Java 数据类型的两大分类

类型

存储内容

默认值

是否可为 null

基本数据类型

直接存储值

有(如 0, false, \u0000

❌ 不可为 null

引用数据类型

存储对象的内存地址(引用)

null

✅ 可为 null


基本数据类型(8 种)

Java 提供 8 种基本数据类型,分为四类:整数、浮点、字符、布尔

1. 整数类型

类型

字节数

范围

默认值

使用场景

byte

1

-128 ~ 127

0

节省内存,如传感器数据

short

2

-32,768 ~ 32,767

0

中小型整数

int

4

±21 亿

0

最常用的整数类型

long

8

±9.22 × 10¹⁸

0L

大数值(如人口、天文数据)

💡 注意long 字面量需加 L 后缀,如 123456789L

2. 浮点类型

类型

字节数

精度

默认值

使用建议

float

4

~6–7 位有效数字

0.0f

内存敏感场景(较少用)

double

8

~15–16 位有效数字

0.0d

默认浮点类型,推荐使用

⚠️ 浮点数存在舍入误差,不应用于精确计算(如金融)。此时应使用 BigDecimal

3. 字符类型

  • char16 位 Unicode 字符

  • 范围:065,535(即 \u0000\uffff

  • 单引号表示:'A', '中', '\u0041'

4. 布尔类型

  • boolean:仅两个值 → truefalse

  • 用于条件判断、循环控制等逻辑操作

  • 无默认数值对应(不同于 C/C++ 的 0/1)


基本类型速查表

类型

默认值

大小

示例

范围

boolean

false

JVM 依赖(通常 1 字节)

true

byte

0

1 字节

100

-128 ~ 127

char

\u0000

2 字节

'A'

0 ~ 65,535

short

0

2 字节

2000

-32,768 ~ 32,767

int

0

4 字节

-500

±2.14×10⁹

long

0L

8 字节

123456789L

±9.22×10¹⁸

float

0.0f

4 字节

3.14f

~7 位精度

double

0.0d

8 字节

3.14159

~16 位精度


引用数据类型

引用类型不直接存储数据,而是存储对象在堆内存中的地址

1. String(字符串)

  • 表示不可变的字符序列

  • 用双引号定义:"Hello"

  • 属于 java.lang.String

String name = "Geek1";
// name = name + "!"; // 实际创建了新对象

提示:频繁修改字符串?使用 StringBuilderStringBuffer


2. 类(Class)

用户自定义的数据结构,包含属性(字段)和行为(方法)。

class Car {
    String model;
    int year;
    
    void display() {
        System.out.println(model + " (" + year + ")");
    }
}

3. 对象(Object)

类的实例。通过 new 关键字创建。

Car myCar = new Car(); // myCar 是一个对象引用

每个对象拥有:

  • 状态(字段值)

  • 行为(可调用的方法)

  • 唯一身份(内存地址)


4. 接口(Interface)

定义方法契约,实现多态与抽象。

interface Animal {
    void sound(); // 抽象方法
}

class Dog implements Animal {
    public void sound() {
        System.out.println("Woof");
    }
}

✅ Java 不支持多继承,但一个类可实现多个接口。


5. 数组(Array)

  • 存储同类型多个元素的容器

  • 长度固定,索引从 0 开始

  • 属于对象,继承自 Object

int[] numbers = {1, 2, 3};
String[] names = new String[3];
names[0] = "Geek1";

基本类型 vs 引用类型

特性

基本类型

引用类型

存储位置

栈(局部变量)

堆(对象),栈存引用

默认值

有(如 0, false

null

是否可为 null

❌ 否

✅ 是

比较方式

== 比较值

== 比较地址,.equals() 比较内容

内存开销

较大(含对象头等元数据)

示例

int x = 5;

String s = "Hi";


应用建议

  1. 整数优先用 int,除非明确需要更大范围(用 long)或节省内存(用 byte/short

  2. 浮点数优先用 doublefloat 仅用于内存极度受限场景

  3. 避免用 float/double 做精确计算(如金额),改用 BigDecimal

  4. 字符串拼接在循环中用 StringBuilder

  5. 数组长度不可变,动态需求考虑 ArrayList


重点总结

  • Java 有 8 种基本数据类型boolean, byte, short, int, long, float, double, char

  • 基本类型直接存值,引用类型存对象地址

  • String不可变对象,属于引用类型

  • 类、对象、接口、数组都属于非基本(引用)类型

  • 选择合适类型可提升性能、避免溢出和精度丢失


思考题

  1. 为什么 int 是最常用的整数类型?什么情况下必须使用 long

  2. float f = 3.14; 这行代码会报错吗?为什么?

  3. 以下代码输出什么?为什么?

    String a = "Hello";
    String b = "Hello";
    System.out.println(a == b); // ?
  4. 如何安全地比较两个 Double 对象的值?