Java 仅声明类类型的变量时的内存分配

Java 仅声明类类型的变量时的内存分配,java,Java,在Java中,当我们只声明一个类类型的变量时,只创建一个引用(不为对象分配内存)。是否将引用t保存在堆上将创建空间的某个位置?或者如果我错了,那么当我们声明变量时,内存中到底发生了什么 Test t; 声明变量时: Test t; 空间用于引用(固定数量,不取决于类中成员的数量)。实例化变量时,请使用new关键字: t = new Test(); 然后在堆上为变量留出空间,t引用该空间。声明变量时,该值必须足够大,以容纳测试的所有成员: Test t; 空间用于引用(固定数量,不取决于

在Java中,当我们只声明一个类类型的变量时,只创建一个引用(不为对象分配内存)。是否将引用t保存在堆上将创建空间的某个位置?或者如果我错了,那么当我们声明变量时,内存中到底发生了什么

Test t; 

声明变量时:

Test t;
空间用于引用(固定数量,不取决于类中成员的数量)。实例化变量时,请使用new关键字:

t = new Test();

然后在堆上为变量留出空间,
t
引用该空间。声明变量时,该值必须足够大,以容纳
测试的所有成员:

Test t;
空间用于引用(固定数量,不取决于类中成员的数量)。实例化变量时,请使用new关键字:

t = new Test();
然后在堆上为变量留出空间,
t
引用该空间。它必须足够大,以容纳
测试的所有成员

在Java中,当我们只声明一个类类型的变量时,只创建一个引用(不为对象分配内存)

这是正确的

是否将引用t保存在堆上将创建空间的某个位置

答案取决于声明出现的上下文。如果所述声明是对象的一部分(即
t
是一个字段),则引用的空间将与包含字段的对象的其余部分的空间一起从堆中分配。否则,将在JVM的堆栈框架中分配引用的空间

在Java中,当我们只声明一个类类型的变量时,只创建一个引用(不为对象分配内存)

这是正确的

是否将引用t保存在堆上将创建空间的某个位置


答案取决于声明出现的上下文。如果所述声明是对象的一部分(即
t
是一个字段),则引用的空间将与包含字段的对象的其余部分的空间一起从堆中分配。否则,引用的空间将在JVM的堆栈框架中分配。

您的问题是这样的吗?:如果我写
inta,它会分配内存吗?实际上不是…我是在谈论类测试类型的类类型引用变量t的声明。你的问题是这样的吗?:如果我写
inta
,它会分配内存吗?实际上不是……我说的是类测试类型的类类型引用变量t的声明。@P45E除了最好的答案外,你不应该对每个答案都投反对票。不管还有什么其他答案,下降票代表坏答案,上升票代表好答案。你可以自由地做你想做的事,但是你所做的对你自己和写答案的人来说都是适得其反的。我同意,但是这个答案没有增加其他答案所增加的东西。它是不完整的,没有提到声明是类的字段时的情况。i、 这不好。真的,我认为选民应该为他们的行为辩护。@P45。除了最好的答案外,你不应该否决所有答案。不管还有什么其他答案,下降票代表坏答案,上升票代表好答案。你可以自由地做你想做的事,但是你所做的对你自己和写答案的人来说都是适得其反的。我同意,但是这个答案没有增加其他答案所增加的东西。它是不完整的,没有提到声明是类的字段时的情况。i、 这不好。我真的认为投票人应该为他们的行为辩护。你能告诉我“如果所说的声明是一个对象的一部分(即t是一个字段)”的含义吗。在我的问题中,t是类Test的一个引用变量(它可能包含一个字段,比如int a)@Naveen我的意思是:
classmyclass{Test t;/*更多东西*/}
谢谢,不清楚…..但是引用变量(t)的内存大小是多少因为当引用使用新操作符(如t=new Test())初始化时,对象的实际内存将被分配@即使引用变量的大小不会随赋值而改变,只是其值会有所不同。使用
new
进行的分配将在堆上分配
Test
,并将新分配的对象的地址放入先前分配给变量
t
的空间中。您能告诉我“如果所述声明是对象的一部分(即t是字段)”的含义吗。在我的问题中,t是类Test的一个引用变量(它可能包含一个字段,比如int a)@Naveen我的意思是:
classmyclass{Test t;/*更多东西*/}
谢谢,不清楚…..但是引用变量(t)的内存大小是多少因为当引用使用新操作符(如t=new Test())初始化时,对象的实际内存将被分配@即使引用变量的大小不会随赋值而改变,只是其值会有所不同。使用
new
的分配将在堆上分配
Test
,并将新分配对象的地址放入先前分配给变量
t
的空间中。