2 ctrlk ctrlk 于 2016.03.25 19:03 提问

java中io等非托管资源close与赋值为null有什么区别 10C

io操作如果没有close而直接赋值为null有什么后果,而close之后又没有赋值为null,也就是还有对象的引用,那这个对象会不会释放内存,垃圾回收器会不会回收它
Reader reader = new InputstreamReader(new FileInputStream()); 如果reader.close()关闭了reader的资源 则FileInputStream的资源有没有关闭 ,没关闭的话如何关闭

2个回答

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.25 19:19

close()操作是关闭资源的作用,没close的话,如果另一个程序也要打开写,或读这个文件就会出问题。
close是为了释放系统资源。close操作不执行,可能会影响其他进行的操作,并没有什么大的后果。
java的对象,不置为null,也会被垃圾回收的,内存回收跟是否close操作无关。一般对象的作用域中,方法调用完成,对象空间会自动回收的。

StressedOut
StressedOut   2016.03.25 22:20

对象是否释放内存在于该对象是否还被引用,设置为null是为了让GC更快回收,不设置的话,会依据该引用变量的作用域执行回首。局部变量是在跳出该局部作用域后,实例变量是在退出该对象实例所在的作用域后回首,静态类变量永远不回收

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!