该不该将变量设为 null ?
该不该将变量设为 null ?
对于引用类型的变量,在什么时候需要将其显式设为 null ,在什么时候不需要呢?
局部变量
对于局部变量,在方法结束的时候,变量就会失效,变量指向的对象引用也会减少一个,如果该变量是该对象唯一的引用,那么该对象就会被 GC 回收。这个时候完全没必要显式将变量设为 null,因为这样做只是相当于显式声明了变量作用域的终结。而且,这样做可能会有两个弊端:
- 可能会带来
bug。你在这里将变量显式设为null,如果后面有人还要用该变量确却不知道该变量已被设为null就会带来bug。 - 可能阻止
GC提前回收该对象。在你最后一次使用该变量后,如果不在后面显式将其设为null,那么CLR可能会提前检测到该变量后面再无引用,从而提前回收对象资源。如果你在后面显式将其设为null,那么CLR会认为该变量后面还会被使用,从而不能回收。
成员变量
在两种情形下,可能会将某变量显式设为 null 。
- 它是某个长生存期对象的成员,并且再也不会被该对象使用,而且比较大,在这种时候,将其设为
null是一种优化。 - 它是某个长生存期对象的成员,并且再也不会被该对象使用,并且已经被
dispose了以释放其占用的资源。这里将其设为null是一种安全的做法,因为确定某人误用了一个null对象比确定某人误用了一个已被dispose的对象更容易些。
该不该将变量设为 null ?的更多相关文章
- 关于判断变量是否为null的顺序问题。
if("y".equals(other)){ } 其中,other字符串变量可能为Null,可以加一个null判断或者将常量写在前面,变量写在equals后面.如果将变量other ...
- JAVA变量初始化赋值null
在Java中,null值表示引用不指向任何对象.运行过程中系统发现使用了这样一个引用时·可以立即停止进一步的访问,不会给系统带来任何危险. 1.如果是对象的field的话那么系统在初始化对象的时候会 ...
- C# DateTime变量不能赋null值
使用定时器的时候: DateTime aimtime=DateTime.Now.AddSeconds(1); CheckTimer() { if(DateTime.Now.CompareTo(aimt ...
- 为什么delete指针后指针设为null(已解答)
int *p;/*........*/delete p; p=null; 看代码的过程中,有这么一个疑问.删除了指针p,指针p既是不存在,怎么还能设置指针p为null呢?为什么还要设置为null呢? ...
- php解析json字符串变量总是空白null
通过接口获取的json字符串使用json_decode始终无法正确解析,返回空白. 直接把结果字符串复制出来手动创建一个变量却正常,在前端js也能解析,搞了半天不得其解,最后发现是接口输出的结果包含有 ...
- 过早的给方法中 引用对象 设为 null 可被 GC提前回收吗?
经常在代码中看到有人将 null 赋值给引用类型,来达到让 GC 提前回收的目的,这样做真的有用吗?今天我们就来研究一下. 为了方便讲解,来一段测试代码,提前将 test1=null ,然后调用 GC ...
- null VS undefined
null VS undefined “null与undefined的区别?” 以前去淘宝面试的时候被问过这个问题,当时只是粗略的按照犀牛书上的答案讲了下,但具体的并没有深入去了解. 后来有机会去问问身 ...
- 浅谈js中null和undefined的区别
在JS中,null和undefined是经常让人摸不着头脑的东西,尤其是在数据初始化以及处理的过程中,经常稍微不注意,就会让页面在渲染时出现报错,下面来细说下,这两者之间的区别: null 表示一个对 ...
- JavaScript闭包(Closure)
JavaScript闭包(Closure) 本文收集了多本书里对JavaScript闭包(Closure)的解释,或许会对理解闭包有一定帮助. <你不知道的JavsScript> Java ...
随机推荐
- USACO Section 3.3: Riding the Fences
典型的找欧拉路径的题.先贴下USACO上找欧拉路径的法子: Pick a starting node and recurse on that node. At each step: If the no ...
- android 从服务器上获取APK下载安装
简单的为新手做个分享. 网上有些资料,不过都是很零散,或是很乱的,有的人说看不懂. 一直有新手说 做到服务器更新APK时没有思路,这里做个简单的分享,希望有不同思路的可以讨论. 下面做个很简单的读 ...
- Passing JavaScript Objects to Managed Code
Silverlight If the target managed property or input parameter is strongly typed (that is, not typed ...
- Android之开发杂记(三)
一.popup 弹出框 在onCreate中创建时异常 Unable to add window -- token null is not valid; is your activity runnin ...
- Java实现图片压缩代码,图片大小转换
在很多项目中我们会把上传的图片做处理,比较图片上传过多对服务器的容量和带宽有很多的浪费,如果不是必须的高清图片,我们可以通过代码来做压缩.在我的项目中我们压缩图片的目的是让web页面打开的速度很快,并 ...
- 如何在User版本开启串口(Uart),抓取上层Log,开启输入控制台
[原][FAQ03891] 如何在User版本开启串口(Uart),抓取上层Log,开启输入控制台 2014-11-26阅读1369 评论0 FAQ Content [Description]如何在U ...
- HDU 4691 Front compression(后缀数组)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4691 题意:给出Input,求出Compressed output.输出各用多少字节. 思路:求后缀数 ...
- JAVA设计模式之【简单工厂模式】
1.创建抽象类User public abstract class User // 抽象类 { public void sameOperation() { System.out.println(&qu ...
- HDU 3294 (Manacher) Girls' research
变形的求最大回文子串,要求输出两个端点. 我觉得把'b'定义为真正的'a'是件很无聊的事,因为这并不会影响到最大回文子串的长度和位置,只是在输出的时候设置了一些不必要的障碍. 另外要注意一下原字符串s ...
- Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载)
Tarjan算法应用 (割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)问题)(转载) 转载自:http://hi.baidu.com/lydrainbowcat/blog/item/2 ...