第6章

Java基本数据类型

掌握Java的8种基本数据类型及其特点和使用方法

学习目标

Java基本数据类型概述

Java是一种强类型语言,所有变量在使用前必须声明其数据类型。Java提供了8种基本数据类型(Primitive Data Types),它们是Java语言内置的数据类型,不是对象,直接存储在栈内存中,具有高效的存储和访问特性。

基本数据类型的特点:
  • 直接存储在栈内存中,访问速度快
  • 有固定的存储空间大小
  • 有明确的取值范围
  • 有默认值,不需要使用new关键字创建

数据类型分类

Java的8种基本数据类型可以分为4大类:

整型数据类型

整型数据类型用于存储整数值,Java提供了4种不同大小的整型数据类型,以满足不同的存储需求。

byte

  • 大小:8位(1字节)
  • 取值范围:-128 到 127
  • 默认值:0
  • 用途:节省内存空间
示例:
byte age = 25;
byte temperature = -10;

short

  • 大小:16位(2字节)
  • 取值范围:-32,768 到 32,767
  • 默认值:0
  • 用途:比int节省内存
示例:
short year = 2024;
short score = 95;

int

  • 大小:32位(4字节)
  • 取值范围:-2,147,483,648 到 2,147,483,647
  • 默认值:0
  • 用途:最常用的整型
示例:
int count = 1000;
int population = 1400000000;

long

  • 大小:64位(8字节)
  • 取值范围:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807
  • 默认值:0L
  • 用途:存储大整数
示例:
long distance = 384400000L;
long timestamp = 1640995200000L;
注意:long类型的字面量需要在数字后面加上L或l后缀,建议使用大写L以避免与数字1混淆。

浮点型数据类型

浮点型数据类型用于存储带有小数部分的数值,Java提供了两种浮点型数据类型。

float

  • 大小:32位(4字节)
  • 精度:单精度,约7位有效数字
  • 取值范围:±3.4E±38
  • 默认值:0.0f
示例:
float price = 19.99f;
float pi = 3.14159f;

double

  • 大小:64位(8字节)
  • 精度:双精度,约15位有效数字
  • 取值范围:±1.7E±308
  • 默认值:0.0d
示例:
double salary = 50000.50;
double pi = 3.141592653589793;
浮点型使用建议:
  • float类型的字面量需要在数字后面加上f或F后缀
  • double是默认的浮点型,可以不加d后缀
  • 对于精度要求高的计算,建议使用double
  • 金融计算建议使用BigDecimal而不是浮点型

字符型数据类型

char

  • 大小:16位(2字节)
  • 编码:Unicode字符集
  • 取值范围:0 到 65,535
  • 默认值:'\u0000'
示例:
char letter = 'A';
char digit = '9';
char chinese = '中';
char unicode = '\u0041'; // 'A'的Unicode

字符型特点

常用转义字符:
char newline = '\n';    // 换行符
char tab = '\t';        // 制表符
char backslash = '\\';  // 反斜杠
char quote = '\'';      // 单引号
char doubleQuote = '\"'; // 双引号

布尔型数据类型

boolean

  • 大小:1位(理论上)
  • 取值:true 或 false
  • 默认值:false
  • 用途:逻辑判断
示例:
boolean isStudent = true;
boolean isMarried = false;
boolean canVote = age >= 18;
布尔型特点:
  • 只有两个值:true和false
  • 常用于条件判断和循环控制
  • 不能与其他数据类型进行转换
  • 在JVM中实际占用的空间可能不止1位

数据类型比较表

数据类型 大小 取值范围 默认值 示例
byte 8位 -128 到 127 0 byte b = 100;
short 16位 -32,768 到 32,767 0 short s = 1000;
int 32位 -2,147,483,648 到 2,147,483,647 0 int i = 100000;
long 64位 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0L long l = 100000L;
float 32位 ±3.4E±38(7位有效数字) 0.0f float f = 3.14f;
double 64位 ±1.7E±308(15位有效数字) 0.0d double d = 3.14159;
char 16位 0 到 65,535(Unicode字符) '\u0000' char c = 'A';
boolean 1位 true 或 false false boolean b = true;

完整代码示例

DataTypesExample.java - 基本数据类型演示
/**
 * Java基本数据类型演示程序
 * 展示8种基本数据类型的声明、初始化和使用
 * 
 * @author Java学习者
 * @version 1.0
 */
public class DataTypesExample {
    
    public static void main(String[] args) {
        // 整型数据类型
        byte byteValue = 127;           // 8位整型
        short shortValue = 32767;       // 16位整型
        int intValue = 2147483647;      // 32位整型
        long longValue = 9223372036854775807L; // 64位整型
        
        // 浮点型数据类型
        float floatValue = 3.14159f;    // 32位浮点型
        double doubleValue = 3.141592653589793; // 64位浮点型
        
        // 字符型数据类型
        char charValue = 'A';           // 16位Unicode字符
        char unicodeChar = '\u4E2D';    // Unicode表示的中文字符'中'
        
        // 布尔型数据类型
        boolean booleanValue = true;    // 布尔值
        
        // 输出所有数据类型的值
        System.out.println("=== Java基本数据类型演示 ===");
        System.out.println();
        
        System.out.println("整型数据类型:");
        System.out.println("byte值: " + byteValue + " (范围: -128 到 127)");
        System.out.println("short值: " + shortValue + " (范围: -32,768 到 32,767)");
        System.out.println("int值: " + intValue + " (范围: -2,147,483,648 到 2,147,483,647)");
        System.out.println("long值: " + longValue + " (范围: -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807)");
        System.out.println();
        
        System.out.println("浮点型数据类型:");
        System.out.println("float值: " + floatValue + " (32位单精度)");
        System.out.println("double值: " + doubleValue + " (64位双精度)");
        System.out.println();
        
        System.out.println("字符型数据类型:");
        System.out.println("char值: " + charValue + " (Unicode字符)");
        System.out.println("Unicode字符: " + unicodeChar + " (\\u4E2D)");
        System.out.println();
        
        System.out.println("布尔型数据类型:");
        System.out.println("boolean值: " + booleanValue + " (true或false)");
        System.out.println();
        
        // 演示数据类型的大小
        demonstrateDataTypeSizes();
        
        // 演示数据类型的默认值
        demonstrateDefaultValues();
    }
    
    /**
     * 演示各种数据类型的字节大小
     */
    public static void demonstrateDataTypeSizes() {
        System.out.println("=== 数据类型大小(字节) ===");
        System.out.println("byte: " + Byte.BYTES + " 字节");
        System.out.println("short: " + Short.BYTES + " 字节");
        System.out.println("int: " + Integer.BYTES + " 字节");
        System.out.println("long: " + Long.BYTES + " 字节");
        System.out.println("float: " + Float.BYTES + " 字节");
        System.out.println("double: " + Double.BYTES + " 字节");
        System.out.println("char: " + Character.BYTES + " 字节");
        System.out.println("boolean: 理论上1位,实际实现可能不同");
        System.out.println();
    }
    
    /**
     * 演示各种数据类型的默认值
     */
    public static void demonstrateDefaultValues() {
        System.out.println("=== 数据类型默认值 ===");
        
        // 创建一个内部类来演示默认值
        class DefaultValues {
            byte defaultByte;
            short defaultShort;
            int defaultInt;
            long defaultLong;
            float defaultFloat;
            double defaultDouble;
            char defaultChar;
            boolean defaultBoolean;
        }
        
        DefaultValues defaults = new DefaultValues();
        
        System.out.println("byte默认值: " + defaults.defaultByte);
        System.out.println("short默认值: " + defaults.defaultShort);
        System.out.println("int默认值: " + defaults.defaultInt);
        System.out.println("long默认值: " + defaults.defaultLong);
        System.out.println("float默认值: " + defaults.defaultFloat);
        System.out.println("double默认值: " + defaults.defaultDouble);
        System.out.println("char默认值: '" + defaults.defaultChar + "' (Unicode: \\u" + 
                          Integer.toHexString(defaults.defaultChar).toUpperCase() + ")");
        System.out.println("boolean默认值: " + defaults.defaultBoolean);
    }
}
💻 查看完整代码 - 在线IDE体验

数据类型使用最佳实践

选择合适的数据类型

推荐做法

  • 根据数据范围选择合适的类型
  • 整数优先使用int,超出范围时使用long
  • 小数优先使用double,精度要求不高时使用float
  • 布尔值使用boolean,不要用0和1代替
  • 字符使用char,字符串使用String

避免做法

  • 不要为了节省内存而盲目使用小类型
  • 不要在不需要时使用long或double
  • 不要忘记float和long的后缀
  • 不要用数字代替布尔值
  • 不要混淆char和String
最佳实践示例:
// ✅ 推荐写法
int count = 100;              // 普通整数使用int
long timestamp = 1640995200000L; // 大整数使用long,加L后缀
float price = 19.99f;         // float类型加f后缀
double pi = 3.141592653589793; // 高精度小数使用double
boolean isValid = true;       // 布尔值使用boolean
char grade = 'A';             // 单个字符使用char

// ❌ 不推荐写法
byte count = 100;             // 没必要使用byte
int timestamp = 1640995200;   // 可能溢出
float price = 19.99;          // 缺少f后缀,会报错
float pi = 3.141592653589793f; // 精度损失
int isValid = 1;              // 应该使用boolean
String grade = "A";           // 单个字符不需要String

章节小结