java中的null占空间吗?

来源:百度知道 编辑:UC知道 时间:2024/05/14 19:37:20
public class A{
String str;
Object obj;
public void m1(){
Object obj2;
obj2=new Object();
}
以上代码中什么时候给str、obj、obj2这些变量分配内存,怎么初始化的?望高手指点,没有研究过这类问题的,请不要想当然的回答,要不然会误导人的,谢谢合作!

再new A的对象时候,在栈内给str,obj分配空间,大小可能是2个字节也可能是4个或8个,java规范没有规定,不同jvm可以有不同的实现,我们也没有必要关注这个,这个占的内存我们也无法得到。分配空间后就执行构造方法了。
obj2在执行m1的时候首先在栈内分配空间,new Object()执行的时候在堆内分配空间,然后将堆内的这个地址赋值给obj2。所有这些内存占用的大小我们都是得不到的

关于null的问题,比如String a = null;
这句话在栈内是分配了空间的,但在堆内是没有分配的

//null不分配对内存只是给JAVA堆栈的该变量句柄附一个标记值
public class A{
String str;
Object obj;
public void m1(){
Object obj2;
obj2=new Object();
}
以上代码: str,obj在两个属性只有在建立A对象(比如A a = new A()),并且调用:a.str = "xxx";和obj = new Object();时才会被分配内存,obj2只有在调用你的方法m1时才会非配内存,并且在调用结束后销毁

构造时在参数

是的,只是给它分配了空间,也就是在堆内存里没有实际东西存在