关于java的null
比如a=null;以下说法哪种正确?1)a在栈里其引用的一段内存空间处于堆中,但是这段内存空间虽然是存在着的,但是里面没有存储任何内容。2)a在栈里,其没有引用堆中的任何...
比如a=null;
以下说法哪种正确?
1)a在栈里 其引用的一段内存空间处于堆中,但是这段内存空间虽然是存在着的,但是里面没有存储任何内容。
2)a在栈里,其没有引用堆中的任何内存空间,即a本身就是一个null
一知半解的人闪开 对知识掌握谨慎、严格、准确的人来帮忙解答 展开
以下说法哪种正确?
1)a在栈里 其引用的一段内存空间处于堆中,但是这段内存空间虽然是存在着的,但是里面没有存储任何内容。
2)a在栈里,其没有引用堆中的任何内存空间,即a本身就是一个null
一知半解的人闪开 对知识掌握谨慎、严格、准确的人来帮忙解答 展开
10个回答
展开全部
首先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.
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.
展开全部
a在栈里,其没有引用堆中的任何内存空间,即a本身就是一个null
这个正确。
准确来说a只是一个引用,他其实相当于C里的指针。
a这个引用也是一个变量,它在栈里。这个变量可以保存的内容是一个地址,这个地址表示了堆空间中的一个起始地址。当a被赋值后,a里放的就是它指的那个对象的地址。
所以,a如果为null的话,准确说它是没有在堆里分配空间的。
就如2楼所说,没有意义。
这个正确。
准确来说a只是一个引用,他其实相当于C里的指针。
a这个引用也是一个变量,它在栈里。这个变量可以保存的内容是一个地址,这个地址表示了堆空间中的一个起始地址。当a被赋值后,a里放的就是它指的那个对象的地址。
所以,a如果为null的话,准确说它是没有在堆里分配空间的。
就如2楼所说,没有意义。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
第二个 正确。对于 要是分配内存的话,需要new 生成。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
明显是2正确
1 相当于 声明并赋值了
2只是声明了 所以本身是null
1 相当于 声明并赋值了
2只是声明了 所以本身是null
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
在我所知的虚拟机实现里都是2,
如果用1的话,真想不出来它的垃圾回收是怎么做的。
如果用1的话,真想不出来它的垃圾回收是怎么做的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询