String a=null;这个null在堆中吗?分配内存了吗?null与一般的对象有什么区别? String a=null;这个null在堆中吗?分配内存了吗?null与一般的对象有什么区别? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【wangxiaomei2008】截止到2008-06-27 14:05:11的历史汇总数据(不包括此帖):发帖数:3 发帖分:120 结贴数:2 结贴分:70 未结数:1 未结分:50 结贴率:66.67 % 结分率:58.33 % 楼主加油 a=null表示a不指向任何对象,当然也就没有为a分配空间。 以楼上说法,String a;中这个a也没有指向任何对象了,那就是说String a;与String a=null是相同的呢?这点显然不正确。 null就是0也就說a的值為0(如果a有對象,a的值就應該是對象在堆中地址的值) String a;如果是域变量的话,他就等价与String a=null;String a;如果是方法变量即局部变量的话,他就必须在使用前初始化,不然会报错,也就不等价与String a=null; 都是作为局部变量的,现在问题的关键是String a;与String a=null;在内存分配上有什么区别?null是空引用。什么是空引用呢?在堆中情况是什么?不要说表面的问题啊。 String a = null;这条语句不会创建新对象,只会创建个一个指向String的引用变量,而这个引用变量是存在栈中的。 如果都作为局部变量,那么它们在内存分配上没区别,都是栈里分配一个指针,堆里不分配唯一的区别是对于String a;你要在使用前初始化 null 表示空引用,此时还没创建对象,也不占用堆内存。 二楼是对的,null只是编译器在编译检查时,确保安全的一种方式,java有好多这种编译时检查,泛型不也是利用编译器检查的嘛,这只是语法上的规定,减少运行时出现空指针异常的机会 本质上来说:这只是个语法书写习惯问题,如C++就写null。当对象变量作为全局变量出现时,确实默认为null而你如果不书写null,也不会有任何错误!ok null是java中的一个特殊对象,是一个没有被实例化的对象当对象被实例化的时候(new) 系统就会给改对象分配内存和他所需要的空间 String a;也没有创建对象,String a=null同样没有创建对象,是不是仅仅是java语法检查上有区别?null是一个空引用,有没有比较形象的说法来形容null是什么? String a; 和 String a = null; 没区别。 想了一下,应该是对象,从调用fun(null);就可以看出来,特殊对象,static的,final的,jvm赋值的,没有任何义意的 null是jvm中一个特殊的东西String a=null;说明这个引用不指向任何实例 C++中String a;这就相当于创建了对象a了,除非是String* a = NULL;这样的形式 String a; --> stack中定义了一个变量a = null; --> a在stack中的值为0就说成员变量初始化,如果String a;int b;char c;以上没有初始化也一样拿来用,b = 0,c = 0, a却为null但是在数值上表述的话,就是:1>在即将创建对象的时候,先为其分配heap内存空间2>内存被清理为0(自动就对成员变量做了初始化了)这个null,只是一个表象,它并不代表对象,它是告诉我们的编译器,这个reference的值为0. a=null表示a不指向任何对象,当然也就没有为a分配空间。=============================这个说法不对,当然分配了空间,相当C++一个指针的空间; String a; 和 String a = null; a==b 没区别,ok? 沒區別?如果String a是局域變量,會出錯 焦点问题。。 大家看看这个程序 请教大家在做有弹出窗口的程序时,是不是一般都要用多线程的? 排列组合问题? dnd中怎样根据拖放位置更换光标? 实际java开发中你们使用哪一种数据库系统?急盼 Runtime.getRuntime().totalMemory();是得到整个虚拟机内存吗? 奇怪的问题!!!!!! 怎样设置JButton的大小,形状(只是要它凸起),位置,颜色? 大家看看是为什么? 请问一下,开源的数据库连接池用那个比较好? 如何判断当前月的第一天是星期几?
楼主【wangxiaomei2008】截止到2008-06-27 14:05:11的历史汇总数据(不包括此帖):
发帖数:3 发帖分:120
结贴数:2 结贴分:70
未结数:1 未结分:50
结贴率:66.67 % 结分率:58.33 %
楼主加油
也就說a的值為0(如果a有對象,a的值就應該是對象在堆中地址的值)
String a;如果是域变量的话,他就等价与String a=null;
String a;如果是方法变量即局部变量的话,他就必须在使用前初始化,不然会报错,也就不等价与String a=null;
在堆中情况是什么?不要说表面的问题啊。
唯一的区别是对于String a;你要在使用前初始化
而你如果不书写null,也不会有任何错误!ok
String a;也没有创建对象,String a=null同样没有创建对象,是不是仅仅是java语法检查上有区别?null是一个空引用,有没有比较形象的说法来形容
null是什么?
String a=null;说明这个引用不指向任何实例
a = null; --> a在stack中的值为0就说成员变量初始化,如果
String a;
int b;
char c;以上没有初始化也一样拿来用,b = 0,c = 0, a却为null
但是在数值上表述的话,就是:
1>在即将创建对象的时候,先为其分配heap内存空间
2>内存被清理为0(自动就对成员变量做了初始化了)这个null,只是一个表象,它并不代表对象,它是告诉我们的编译器,这个reference的值为0.
=============================
这个说法不对,当然分配了空间,相当C++一个指针的空间;
如果String a是局域變量,會出錯