C#中的obj==null问题?

C#中的obj==null问题

最近看设计模式的案例部分,动手练了一个应用简单工厂模式的计算器案例,并且在原基础上上实现了连续运算。连续运算需要保存上一次运算的结果,每一次运算都需要一个新的运算类(+-X÷子类),过多的连续运算前边的子类对象已经失去作用,考虑如何手动提前释放内存空间?通过网络找到了如下相关信息,并做一个简单记录总结。

问题1:C#中obj==null 能起到释放内存的作用吗?

答:原贴连接
个人认为这是错误的:
设置对象null时执行,设置对象null只是段开了内存对象与引用句柄之间的引用关系,只是把引用转了个位,并没有让对象为null。
C#有自己的垃圾回收机制,关键的是垃圾回收器在运行的时候会释放怎么样的对象?在我的理解里一直为当该对象没有任何引用时,垃圾回收器就运行该对象的析构,释放对象。
按我的理解,每个对象都是一个气球,当你要某一个气球的时候,就把它吹大,然后用一根绳子系着,同一个气球有可能被多个人同时牵着,
它还没破的时候就一直占用空间(内存),GC相当于一个专门扎破气球的人,不断观察附近哪个气球没有被牵着,发现了以后就把它扎破,释放内存空间。
所以这种方式可能促进垃圾回收机制的提前回收,但是并不能立即回收。

请问2 c#中object o和object o=null有什么区别?

答:没有区别。
Object o;等待初始化或自动初始,在内存的栈里有一个叫o的变量,但没有指向堆里的哪些引用;
Object o = null;手动初始化,在内存的栈里有一个叫o的变量,但没有指向堆里的哪些引用;

问题3 为什么要用(null==object)这种形式?

答:if(object == null)这个语句有时候没注意就会写成:
if(object = null)//少了个等号
这样在有的语言中编译是不会出错的,而在运行中结果就不知道了。
但是你把null写在左边,null其实相当于一个常量,你对常量赋值编译的时候就会报错,
这样就能防止这种错误的发生了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值