Bootstrap

【Java】引用赋值

基础概念

基本类型 vs 引用类型

特性 基本类型(Primitive) 引用类型(Reference)
存储内容 直接存储数据值(如 int a = 10;) 存储对象的内存地址(如 String s = “Hello”;)
赋值行为 复制值(独立修改) 复制地址(共享对象)
默认值 零值(如 0、false) null
示例类型 int, char, double 类、数组、接口、枚举

以下是代码示例:

// 基本类型:值复制
int a = 10;
int b = a;
b = 20;
System.out.println(a); // 输出 10(a 未变)

// 引用类型:地址共享
class Person {
   
    String name;
    Person(String name) {
    this.name = name; }
}
Person p1 = new Person("Alice");
Person p2 = p1;
p2.name = "Bob";
System.out.println(p1.name); // 输出 "Bob"(共享对象)

引用变量的声明与初始化

声明方式

ClassName obj; // 声明一个引用变量,初始值为null

初始化方法

方式 示例 说明
new 关键字 obj = new ClassName(); 调用构造函数创建新对象
直接赋值 String s = “Java”; 指向常量池或已有对象
null 赋值 obj = null; 明确表示不指向任何对象
方法返回 List list = getList(); 接收方法返回的对象引用

内存模型:栈与堆

区域 存储内容 生命周期
局部变量(基本类型值、引用地址) 方法执行时创建,方法结束自动释放
对象实例、数组 由垃圾回收器(GC)管理

以下是代码示例:

void example() {
   
    int a = 10;               // a在栈中
    String s = new String();  // s的引用在栈中,对象在堆中
}

引用赋值机制

引用传递的本质

Java 严格按值传递:基本类型传递值副本,引用类型传递引用地址副本。

void modify(int num, List<String> list) {
   
    num = 20;             // 不影响外部的 num
    list.add("Modified"); // 修改影响外部对象
    list = new ArrayList<>(); // 仅改变方法内的引用副本
}

public static void main(String[] args) {
   
    int x = 10;
    List<String> data = new ArrayList<>();
    modify(x, data);
    System.out.println(x);    // 输出 10
    System.out.println(data); // 输出 [Modified]
}

共享对象风险:多个引用指向同一对象时,修改会影响所有引用。

List<String> list1 = new ArrayList<>();
List<String> list2 = list1;
list2.add("Item");
System.out.println(list1); // 输出 [Item]

对象比较:== vs equals()

操作 比较内容 示例
== 引用地址是否相同 new String(“A”) == new String(“A”) → false
equals() 对象内容是否相等(需正确重
;