You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中对象赋值(如course2 = course1)的原理及执行机制咨询

关于Java对象赋值的常见疑问解答

咱们把你的问题拆成两部分,一步步讲明白:

1. Instance A = Instance B 具体执行什么操作?

在Java里,所有对象类型的变量(比如你定义的Course对象)存的不是对象本身,而是指向对象内存位置的引用(可以理解为内存地址)。当你执行Instance A = Instance B时,本质是把B变量里保存的引用地址,拷贝一份赋值给A变量。

这时候,A和B就会指向同一个对象实例——不管你通过A还是B修改对象的属性,另一个变量访问到的结果都会跟着变,因为它们操作的是内存里同一个东西。

2. 代码中course2 = course1时发生了什么?

结合你给出的代码片段,咱们还原完整场景来解释:
假设你的main方法完整代码大概是这样(补全你没写完的部分):

public static void main(String[] args) {
    Course course1 = new Course(2531, "Programming Fundamentals");
    Course course2 = new Course(1001, "Programming Fundamentals"); // 你初始化的第二个对象
    course2 = course1; // 这句是疑问核心
    System.out.println(course1.getName());
    System.out.println(course2.getName());
    course1.setName("Java Advanced");
    System.out.println(course1.getName());
    System.out.println(course2.getName());
}

执行course2 = course1的本质:

  • 执行这句之前,course1和course2各自指向内存中两个独立的Course对象;
  • 执行这句之后,course2原来指向的那个对象会被“抛弃”(后续会被Java垃圾回收机制清理),转而和course1指向同一个对象。这时候你通过course1.setName(...)修改名字,course2.getName()也会输出新名字,因为它们操作的是同一个对象。

注释掉这句后的现象解释:

如果把course2 = course1注释掉,course1和course2就一直是两个完全独立的对象。如果你的course2初始化时courseName也是"Programming Fundamentals",那前两次输出自然都是这个字符串。后续如果你只修改course1的名字,course2的名字不会变——因为它们是内存里两个分开的对象,互相不影响。

内容的提问来源于stack exchange,提问作者N Woods

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:35:49