关于java的null

比如a=null;以下说法哪种正确?1)a在栈里其引用的一段内存空间处于堆中,但是这段内存空间虽然是存在着的,但是里面没有存储任何内容。2)a在栈里,其没有引用堆中的任何... 比如a=null;

以下说法哪种正确?
1)a在栈里 其引用的一段内存空间处于堆中,但是这段内存空间虽然是存在着的,但是里面没有存储任何内容。

2)a在栈里,其没有引用堆中的任何内存空间,即a本身就是一个null

一知半解的人闪开 对知识掌握谨慎、严格、准确的人来帮忙解答
展开
 我来答
liushebiao
2009-07-31 · TA获得超过3336个赞
知道小有建树答主
回答量:724
采纳率:0%
帮助的人:388万
展开全部
首先java对象的产生是分两步的:
1.在栈区声明对象 如A a,这时声明的内容相当于一个指针(我们姑且认为它是一个指针,也可以理解为引用),当a=null时表明这是一个没有指向任何对象.
2.实例化a,操作如下a=new A()这是在堆区为a分配了空间.

也就是由栈区的a指向堆区的new A()对象.

而a=null则是表明,首先,a是必然在栈区的,a的值是一个地址(假设它真的是一个指针),a=null表示的是a的值是null,与堆区无关

此时的a与堆并无关系,何况java中有一种申请垃圾回收的手段便是将一个对象赋值为null以切断与之前关联对象的关系,因此答案应该是2.
百度网友4d2210204
2009-07-31 · TA获得超过238个赞
知道答主
回答量:103
采纳率:0%
帮助的人:127万
展开全部
a在栈里,其没有引用堆中的任何内存空间,即a本身就是一个null
这个正确。

准确来说a只是一个引用,他其实相当于C里的指针。

a这个引用也是一个变量,它在栈里。这个变量可以保存的内容是一个地址,这个地址表示了堆空间中的一个起始地址。当a被赋值后,a里放的就是它指的那个对象的地址。

所以,a如果为null的话,准确说它是没有在堆里分配空间的。
就如2楼所说,没有意义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fying0728
2009-07-31
知道答主
回答量:20
采纳率:0%
帮助的人:0
展开全部
2
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
junqing1987
2009-07-31 · TA获得超过343个赞
知道答主
回答量:72
采纳率:0%
帮助的人:0
展开全部
第二个 正确。对于 要是分配内存的话,需要new 生成。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
serbry0033
2009-07-31 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:107万
展开全部
明显是2正确

1 相当于 声明并赋值了

2只是声明了 所以本身是null
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友8b41f47ef
2009-07-31 · TA获得超过229个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:181万
展开全部
在我所知的虚拟机实现里都是2,
如果用1的话,真想不出来它的垃圾回收是怎么做的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(8)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式