java中要注意對象作爲參數引用返回時,對象本身是否變化了

因爲對象參數往往是引用傳參形式,所以很多時候,我們往往會通過調用一個函數,然後直接想當然的認爲該值已經發生變化,然而,情況並非如此,這得需要看看方法裏到底做了些什麼,請看下邊這個例子:

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控件顯示,並且每次顯示都爲其分配了不同的空間,由於未能手動釋放,所以造成框架上顯示了很多重疊的控件,鬱悶了半天,最後才找到問題所在!!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章