java语言,使用lucene过程中碰到的一个参数传递的问题

2025-03-09 23:05:00
推荐回答(1个)
回答1:

嗯,首先呢,你创建了包含IO流的对象。所以在change方法调用前,只要创建没出错,就是不为null的。第一行打印,很好理解。接下来的change才是你疑惑的地方,首先传进方法里的肯定是引用不是对象本身。
再者连引用也是拷贝品,原因是引用只在栈中生效,一个方法就是一个栈了,相互之间是不共享引用的,哪怕是包含关系。而你的问题其实跟引用,对象本身都没啥关系,接下来我们分析下代码。
if(ram!=null),引用是可以访问对象本身的,所以肯定不为空,那么必然执行if代码块。然后你尝试ram.close(),嗯,你是想释放ram对象占用的内存,很可惜他只释放ram包含的IO流对象。嗯,你意识到了,可能没释放干净,又尝试把ram=null,嗯,怎么说呢,这行代码其实屁事没干,它只是把当前的ram引用重新赋值了,完全影响不到之前ram所代表的对象。
其实最后总结一句话:在java里你想自己回收资源,没门。嗯,io流除外。
java的一般对象都是gc负责处理资源回收的。你只能通知,却不能强制命令它立即执行,嗯,你想的没错,java没这个功能,嘿,惊不惊喜。