数据类型-引用数据类型

一、引用数据类型概述

1. 定义

引用数据类型是 Java 中除基本数据类型外的另一大类数据类型,其变量存储的是对象在内存中的地址(引用),而非对象本身的数据。通过引用可以操作对应的对象。
Pasted image 20250804175555.png

2. 特点

  • 变量存储的是地址,指向堆内存中的对象实体。
  • 默认值为null(表示不指向任何对象)。
  • 占用内存空间通常大于基本数据类型(具体大小取决于虚拟机实现)。
  • 赋值操作时,传递的是引用(地址),而非对象本身。

二、引用数据类型分类及详解

1. 数组(Array)

  • 定义:由相同数据类型的元素组成的有序集合,长度固定。

  • 特点

    • 元素类型可以是基本数据类型或引用数据类型。
    • 通过索引(从 0 开始)访问元素。
    • 一旦创建,长度不可改变。
  • 声明与初始化

    // 声明数组
    int[] intArray; // 推荐方式
    String strArray[]; // 兼容C语言的方式
    
    // 初始化
    intArray = new int[3]; // 动态初始化:指定长度,元素为默认值(int默认0)
    String[] names = {"Alice", "Bob", "Charlie"}; // 静态初始化:直接指定元素
    

2. 类(Class)

  • 定义:类是对象的模板,描述对象的属性(成员变量)和行为(方法)。自定义类或 Java 内置类(如StringSystem)均属于此类。

  • 特点

    • 通过new关键字创建类的实例(对象)。
    • 成员变量有默认值(与基本数据类型默认值一致,引用类型默认null)。
  • 示例(以String类为例)

    // String是Java内置的类,用于表示字符串
    String message; // 声明String类型变量
    message = "Hello, Java"; // 初始化,指向字符串对象
    String name = new String("Alice"); // 通过构造方法创建对象
    
  • 自定义类示例

    // 定义类
    class Person {
        String name; // 成员变量
        int age;
        
        void sayHello() { // 成员方法
            System.out.println("Hello, I'm " + name);
        }
    }
    
    // 使用类
    Person person = new Person(); // 创建对象
    person.name = "Tom"; // 赋值成员变量
    person.sayHello(); // 调用方法
    

3. 接口(Interface)

  • 定义:一种抽象类型,仅声明方法(抽象方法)和常量,无方法实现(Java 8 后可包含默认方法和静态方法)。

  • 特点

    • 不能直接实例化,需通过类实现(implements关键字)。
    • 实现类必须重写接口中的抽象方法。
  • 示例

    // 定义接口
    interface Runnable {
        void run(); // 抽象方法
    }
    
    // 实现接口
    class MyThread implements Runnable {
        @Override
        public void run() {
            System.out.println("Thread is running");
        }
    }
    
    // 使用
    Runnable task = new MyThread();
    task.run();
    

4. 枚举(Enum)

  • 定义:一种特殊的类,用于定义固定数量的常量(枚举项)。

  • 特点

    • 枚举项为该枚举类型的实例,自动被public static final修饰。
    • 可包含构造方法、成员变量和方法。
  • 示例

    // 定义枚举
    enum Season {
        SPRING, SUMMER, AUTUMN, WINTER; // 枚举项
    }
    
    // 使用
    Season currentSeason = Season.SUMMER;
    if (currentSeason == Season.SUMMER) {
        System.out.println("It's hot");
    }
    

5. 注解(Annotation)

  • 定义:用于标记代码(类、方法、变量等)的特殊标记,可在编译、运行时被读取并处理。

  • 特点

    • 本身不直接影响代码逻辑,需通过注解处理器生效。
    • 可内置(如@Override@Deprecated)或自定义。
  • 示例(内置注解)

    class Student {
        @Override // 标记重写父类方法
        public String toString() {
            return "Student";
        }
    }
    

6. 记录(Record)(Java 16+)

  • 定义:一种简化的类,用于存储不可变数据(类似 “数据载体”),自动生成构造方法、equals()hashCode()toString()

  • 特点

    • 成员变量默认final,不可修改。
    • 声明时直接指定成员变量,无需手动编写 getter 等方法。
  • 示例

    // 定义记录
    record Point(int x, int y) {}
    
    // 使用
    Point p = new Point(3, 4);
    System.out.println(p.x()); // 自动生成的getter方法
    System.out.println(p); // 自动生成的toString()
    

三、引用数据类型的常见操作

1. 赋值操作

引用数据类型的赋值传递的是地址,多个变量可指向同一个对象,修改一个变量会影响其他变量:

StringBuilder sb1 = new StringBuilder("Hello");
StringBuilder sb2 = sb1; // sb2与sb1指向同一对象
sb2.append(" World");
System.out.println(sb1); // 输出"Hello World"(sb1指向的对象被修改)

2. 比较操作

  • ==:比较两个引用是否指向同一个对象(地址是否相同)。
  • equals():默认与==一致,可重写用于比较对象内容(如String类重写了equals()比较字符串内容)。
String s1 = new String("abc");
String s2 = new String("abc");
System.out.println(s1 == s2); // false(地址不同)
System.out.println(s1.equals(s2)); // true(内容相同)

3. 空值判断

引用变量未指向任何对象时为null,使用前需判断避免NullPointerException

String str = null;
if (str != null) {
    System.out.println(str.length()); // 避免空指针异常
}
Java基础

数据类型-基本数据类型

2025-8-4 17:59:14

Java基础

变量与常量-变量

2025-8-4 21:26:21

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索