该不该将变量设为 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 ...
随机推荐
- 大规模视觉识别挑战赛ILSVRC2015各团队结果和方法 Large Scale Visual Recognition Challenge 2015
Large Scale Visual Recognition Challenge 2015 (ILSVRC2015) Legend: Yellow background = winner in thi ...
- 神经网络:卷积神经网络CNN
一.前言 这篇卷积神经网络是前面介绍的多层神经网络的进一步深入,它将深度学习的思想引入到了神经网络当中,通过卷积运算来由浅入深的提取图像的不同层次的特征,而利用神经网络的训练过程让整个网络自动调节卷积 ...
- CSS和JavaScript标签style属性对照表
CSS和JavaScript标签style属性对照表一般情况是把"-"去掉,后面字母用大写. CSS语法 (不区分大小写) JavaScript语法 (区分大小写) border ...
- git忽略文件【转】
转自: http://cwind.iteye.com/blog/1666646 有很多文件不必使用git管理.例如Eclipse或其他IDE生成的项目文件,编译生成的各种目标或临时文件等.使用git ...
- Eclipse —— 如何修改文件的默认编辑器
Eclipse下的各类文件各自都有默认的编辑器,但不一定好用.如何指定各种文件的默认编辑器呢? 假如,Properties文件,我不想用Eclipse自带的编辑器,而是使用 Properties Ed ...
- psycopg2.pool – Connections pooling / psycopg2.pool – 连接池 / postgresql 连接池
创建新的PostgreSQL连接可以是一个昂贵的操作.这个模块提供了一些纯Python类直接在客户端应用程序实现简单的连接池. class psycopg2.pool.AbstractCon ...
- Windows Myeclipse 10 安装 Perl 插件
1.首先安装 windows 下的 perl 环境这里使用 active perl,选择最新版本 5.16.1下载地址:http://www.activestate.com/activeperl/do ...
- 观察者模式最佳案例实现[JAVA][原创]
/** * American Stock Exchange market(ASE) has a list of stocks.A stock object has two perspective in ...
- [转载]java的几种对象(PO,VO,DAO,BO,POJO)解释
原文地址:java的几种对象(PO,VO,DAO,BO,POJO)解释作者:munandong 一.PO:persistant object 持久对象,可以看成是与数据库中的表相映射的java对象.最 ...
- Java编程思想(11~17)
[注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...