Java中对象与变量有什么区别?alex等变量是对象还是引用?
Java 引用与对象的概念辨析
核心结论
- 你原本的认知是准确的:代码中声明的
alex、linda、john不是对象,是引用类型变量,也叫对象引用,且此时三个变量尚未指向任何实际的对象实例。 - 教程的表述属于面向纯新手的简化处理,有一定误导性但不属于原则性错误,是很多入门教学中常见的模糊化表述。
具体说明
在Java的内存模型中,引用变量和对象是完全独立的两个概念:
- 你给出的代码仅完成了三个
Employee类型引用变量的声明,此时这三个变量仅在栈内存中占用存储空间,没有对应的堆内存对象实例,默认值为null,全程没有任何对象被创建。 - 只有执行
alex = new Employee();这类实例化语句时,JVM才会在堆内存中创建一个实际的Employee对象,同时将该对象的内存地址赋值给alex这个引用变量,让它指向这个实例。 - 同一个对象可以被多个引用同时指向,例如执行
linda = alex;时,仅会将alex存储的对象地址复制给linda,两个引用指向同一个对象,不会生成新的对象。
不少入门教程为了降低新手的理解门槛,会避免在初期引入过于抽象的“引用”概念,直接把持有对象地址的引用变量通俗称为对象,属于教学层面的妥协。但如果要深入学习Java,一定要明确区分二者的差异,否则后续学习值传递、垃圾回收等知识点时很容易出现认知偏差。
内容的提问来源于stack exchange,提问作者syclone
相关产品推荐
相关产品推荐

