java引用变量计数

ac1kyiln  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(438)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

10天前关门了。
改进这个问题
在这段代码中,创建了2个对象,但为什么只创建了4个引用变量?

class Customer {
    public int custId;
    public String custName;
}

public class Tester {
    public static void main(String[] args){
        Customer obj = new Customer();
        Customer objOne = new Customer();
        Customer objTwo;
        Customer objThree = obj;
    }
}
eoigrqb6

eoigrqb61#

在java中,变量有多种类型,分为两大类:基元类型和引用类型。还有八种变量(参见java语言规范,§14.12.3,). 规范中关于各种变量的相关部分包括:
示例变量是在类声明中声明的字段,不使用关键字 static (§8.3.1.1).
如果类t有一个域 a 这是一个示例变量,然后是一个新的示例变量 a 创建并初始化为默认值(§4.12.5)作为t类或t子类的任何类的每个新创建对象的一部分(§8.1.4)....
局部变量由局部变量声明语句声明(§14.4).
每当控制流进入一个块(§14.2)或 for 声明(§14.14)中的局部变量声明语句中声明的每个局部变量创建一个新变量,该语句立即包含在该块或 for 声明。
在您的代码中,我计算了以下引用变量:
方法中的四个局部变量 main() : obj , objOne , objTwo ,和 objThree .
main() ,两个示例 Customer 已创建。每个示例创建都会为 Customer 字段 custName . (每个新示例还为字段带来一个原语类型的示例变量 custId .)
总共有六个参考变量。为什么你认为只有4个被创造出来?
如果您是通过检查生成的字节码得出这个结论,那么 main() 因为(至少)两个变量在创建后立即超出范围(其中一个甚至没有赋值)。

相关问题