如何正确统计Java中的引用变量数量?实例解析
Java引用变量数量统计解析
先明确核心概念:引用变量是能存储对象引用的存储单元,每个存储单元都是独立的,哪怕它们存的引用值指向同一个对象。
先看你的代码(修正了变量声明的小问题,不影响计数逻辑):
class Car { } class Example { public static void main(String[] args) { Car a = new Car(); Car b = new Car(); Car[] cars = {a,a,a,a}; } }
我们逐个统计指向Car对象的引用变量:
- 局部变量
a:1个引用变量,指向第一个Car实例 - 局部变量
b:1个引用变量,指向第二个Car实例 - 数组
cars的4个元素:数组的每个元素都是独立的存储单元,这4个元素各自存储了和a相同的引用值(指向第一个Car实例),所以这是4个独立的引用变量
把这些加起来:1+1+4=6,这就是正确答案的由来。
你之前的疑惑在于混淆了引用值和引用变量:a是一个引用变量,它存的是指向Car对象的内存地址(引用值);数组里的每个元素是新的引用变量,只是它们复制了a的引用值,指向同一个对象,但这些数组元素本身是独立的存储单元,所以必须单独计数。
打个比方:你手里有一把钥匙(a的引用值),然后复制了4把一模一样的钥匙(数组元素的引用值),每把钥匙都是独立的实体(引用变量),虽然它们都能开同一扇门(Car对象),但总共有5把钥匙(a+4个数组元素),再加上b那把,总共6个。
内容的提问来源于stack exchange,提问作者ImNotARobot
相关产品推荐
相关产品推荐

