Java 零基础教程

Java 基本数据类型

基本数据类型(Primitive data types)决定了一个变量能够容纳什么种类的值,以及可以对该变量执行哪些操作。

本章将为你全面系统地梳理四个最关键的基本数据类型:int、float、boolean 和 char。我们将深入探索它们的特性、具体用法以及它们之间的核心差异,为你未来学习更复杂的数据处理打下坚实的地基。

1. 整型数据类型 (int)

int(Integer 的缩写)数据类型用于存储没有小数部分的整数。它是 Java 中最常用、最基础的数据类型之一。

1.1 int 的核心特征

  • 内存大小 (Size): int 在内存中占用 4 字节(32 位)。
  • 取值范围 (Range): 一个 int 变量能容纳的值从 -231 到 231 - 1(即 -2,147,483,648 到 2,147,483,647)。
  • 默认值 (Default Value): 如果你声明了一个 int 变量但没有给它赋初始值(仅限类的成员变量),它的默认值是 0。

1.2 int 代码实战

public class IntExamples {
    public static void main(String[] args) {
        // 声明并初始化一个 int 变量
        int age = 30;
        System.out.println("年龄: " + age); // 输出: 年龄: 30

        // 使用 int 来计数
        int numberOfStudents = 150;
        System.out.println("学生人数: " + numberOfStudents); // 输出: 学生人数: 150

        // 演示 int 的极限取值范围
        int maxIntValue = Integer.MAX_VALUE;
        int minIntValue = Integer.MIN_VALUE;
        System.out.println("int 的最大值: " + maxIntValue); // 输出: int 的最大值: 2147483647
        System.out.println("int 的最小值: " + minIntValue); // 输出: int 的最小值: -2147483648

        // 当我们超过最大值时会发生什么?(整型溢出 / Integer Overflow)
        int overflowedValue = maxIntValue + 1;
        System.out.println("溢出后的值: " + overflowedValue); // 输出: 溢出后的值: -2147483648 (数值会“绕回”到最小值)

        // 当我们低于最小值时会发生什么?(整型下溢 / Integer Underflow)
        int underflowedValue = minIntValue - 1;
        System.out.println("下溢后的值: " + underflowedValue); // 输出: 下溢后的值: 2147483647 (数值会“绕回”到最大值)
    }
}

1.3 实际开发注意事项

  • 当你需要存储规定范围内的整数时,请首选 int
  • 在执行数学运算时,务必警惕潜在的整型溢出或下溢,尤其是在处理极大数值时。如果你需要存储超过 21 亿的巨型数字,请考虑使用 long 数据类型(我们将在后续章节讲解)。
  • int 通常被广泛用于计数器、数组索引以及表示不可分割的数量。

2. 浮点型数据类型 (float)

float 数据类型用于存储单精度浮点数,通俗地说,就是带有小数部分的数字。

2.1 float 的核心特征

  • 内存大小 (Size): float 同样占用 4 字节(32 位)。
  • 取值范围 (Range): float 的取值范围大约在 $\pm1.4 \times 10^{-45}$ 到 $\pm3.4 \times 10^{38}$ 之间。
  • 精度 (Precision): float 大约只能提供 7 位十进制有效数字的精度。这意味着在小数点后或总长度超过 7 位数字后,数值的计算可能会变得不精确。
  • 默认值 (Default Value): 未初始化的 float 变量的默认值是 0.0f
  • 后缀要求 (Suffix): 在 Java 中,你写下的小数默认会被系统认为是精度更高的 double 类型。为了明确告诉系统这是一个 float,你必须在数字末尾加上字母后缀 fF

2.2 float 代码实战

public class FloatExamples {
    public static void main(String[] args) {
        // 声明并初始化一个 float 变量
        float price = 19.99f; // 注意末尾的 'f' 后缀
        System.out.println("价格: " + price); // 输出: 价格: 19.99

        // 使用 float 表示测量数据
        float temperature = 25.5f;
        System.out.println("温度: " + temperature); // 输出: 温度: 25.5

        // 演示精度丢失的局限性
        float largeFloat = 123456789.123456789f;
        System.out.println("巨大的浮点数: " + largeFloat); // 输出: 巨大的浮点数: 1.23456792E8 (注意观察精度是如何丢失的)

        // 除法运算生成浮点数
        float result = 10.0f / 3.0f;
        System.out.println("除法结果: " + result); // 输出: 除法结果: 3.3333333
    }
}

2.3 实际开发注意事项

  • 当你需要存储小数,并且对内存占用比较敏感时,可以使用 float
  • 时刻提防 float 的有限精度。 对于需要极高精确度的应用,请考虑使用 double 数据类型(后续章节讲解)。
  • 永远不要忘记在声明浮点数字面量时加上 fF 后缀,否则会导致编译错误。
  • float 常用于表示测量数据、科学计算数据和图形坐标。

3. 布尔型数据类型 (boolean)

boolean 数据类型专门用于表示逻辑值,它只能是 true(真)或 false(假)。它是控制程序走向和执行决策的基石。

3.1 boolean 的核心特征

  • 内存大小 (Size): Java 官方规范并没有精确定义 boolean 的大小,这取决于具体的 JVM 实现。不过通常来说,它占用的内存极小(通常为 1 字节)。
  • 取值 (Values)boolean 只能容纳两个值:truefalse
  • 默认值 (Default Value): 未初始化的 boolean 变量的默认值是 false

3.2 boolean 代码实战

public class BooleanExamples {
    public static void main(String[] args) {
        // 声明并初始化 boolean 变量
        boolean isJavaFun = true;
        boolean isFishMammal = false;
        
        System.out.println("Java 有趣吗? " + isJavaFun); // 输出: Java 有趣吗? true
        System.out.println("鱼是哺乳动物吗? " + isFishMammal); // 输出: 鱼是哺乳动物吗? false

        // 在条件语句中使用 boolean (后续章节会深入讲解)
        if (isJavaFun) {
            System.out.println("让我们开始学 Java 吧!"); // 输出: 让我们开始学 Java 吧!
        } else {
            System.out.println("也许可以试试别的。");
        }

        // 比较运算会产生 boolean 结果
        int x = 10;
        int y = 5;
        boolean isXGreaterThanY = x > y;
        System.out.println("x 大于 y 吗? " + isXGreaterThanY); // 输出: x 大于 y 吗? true
    }
}

3.3 实际开发注意事项

  • 使用 boolean 来表示只有两种状态的事物(如状态标志或特定条件)。
  • boolean 是使用条件语句和循环控制程序执行流程的核心前提(将在后续章节学习)。
  • 布尔表达式通常是比较运算或逻辑运算的结果。

4. 字符型数据类型 (char)

char 数据类型用于存储单个字符。它代表 Unicode 字符,允许你表示来自不同语言的广泛字符集。

4.1 char 的核心特征

  • 内存大小 (Size)char 占用 2 字节(16 位)的内存。
  • 取值范围 (Range)char 可以表示从 U+0000 到 U+FFFF(即 0 到 65,535)的 Unicode 字符。
  • 默认值 (Default Value): 未初始化的 char 变量默认值是 \u0000'(空字符)。
  • 表达形式 (Representation): 字符必须包含在单引号 (' ') 中。

4.2 char 代码实战

public class CharExamples {
    public static void main(String[] args) {
        // 声明并初始化 char 变量
        char initial = 'J';
        char grade = 'A';
        char currencySymbol = '$';
        
        System.out.println("首字母: " + initial); // 输出: 首字母: J
        System.out.println("成绩: " + grade); // 输出: 成绩: A
        System.out.println("货币符号: " + currencySymbol); // 输出: 货币符号: $

        // 使用 Unicode 转义序列
        char copyrightSymbol = '\u00A9'; // 版权符号的 Unicode
        System.out.println("版权符号: " + copyrightSymbol); // 输出: 版权符号: ©

        // 将数字表示为字符
        char numberChar = '7'; // 注意:这是字符 '7',不是数字 7
        System.out.println("数字字符: " + numberChar); // 输出: 数字字符: 7

        // 字符可以被视为整数处理 (基于 ASCII/Unicode 值)
        int charAsInt = initial; // 隐式从 char 转换为 int
        System.out.println("字符转整数: " + charAsInt); // 输出: 字符转整数: 74 ('J' 的 ASCII 值)
    }
}

4.3 实际开发注意事项

  • 使用 char 来存储单个字符,如字母、数字、符号和控制字符。
  • char 常用于字符串操作和文本处理。
  • 需知晓 char 代表的是 Unicode 字符,所以它能处理各种语言的复杂字符。
  • 你可以使用 Unicode 转义序列(\uXXXX)来表示无法直接键盘输入的特殊字符。