关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
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;
}
}
1条答案
按热度按时间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()
因为(至少)两个变量在创建后立即超出范围(其中一个甚至没有赋值)。