java中要注意对象作为参数引用返回时,对象本身是否变化了

来源:互联网 发布:网络自制节目有哪些 编辑:程序博客网 时间:2024/06/05 12:47

因为对象参数往往是引用传参形式,所以很多时候,我们往往会通过调用一个函数,然后直接想当然的认为该值已经发生变化,然而,情况并非如此,这得需要看看方法里到底做了些什么,请看下边这个例子:

private Instances SortInterestScore(Instances ins) throws Exception

{

       ....................
         //注意调用此方法后,ins已经指向了另外一个空间,故想利用引用改变ins的值注意了,因此,需要添加返回值
         (1)   ins=weka.filters.Filter.useFilter(ins,addValuesFilter);

         (2)   ins.instance(i).setValue(j,String.valueOf(sortNum));

       .............................

        return ins;

    }

如果没有(1),只有(2),那这种情况是成立的,因为直接改了ins对象里的值,对外边有效。然而,如果包含(1)却出意外了,为什么呢,因为ins在方法useFilter中并没有修改,而useFilter是另外开辟空间并将该空间返回给ins,所以,如果把ins看作指针的话,那么它指向的空间已经发生变化,所以对外是无效的。原本以为可以不用返回值就行,然而却大失所望,不得不添加返回值,然后再使用它。

疑问:到这里不免会生出一个疑问,我们知道在C++中垃圾空间回收是需要用户自己处理的,然而在Java中,能够系统自行处理,是方便了很多,然而系统真的会完全了解用户的想法吗?记得上次将一个table控件添加到框架上,然而由于需要多次用到table控件显示,并且每次显示都为其分配了不同的空间,由于未能手动释放,所以造成框架上显示了很多重叠的控件,郁闷了半天,最后才找到问题所在!!


0 0