天天看點

為什麼java中最好不要用String類型臨時存儲密碼一、比較對象二、為什麼String類型不行三、為什麼基本資料類型的數組可以

一、比較對象

既然說了不用String類型,那我們用什麼呢?

用char[],int[],這種基本類型的數組,都行。注意,基本類型,是最重要的要求。

二、為什麼String類型不行

最關鍵的一點就是,String是一個對象,是引用資料類型。在java中,一個對象存儲在記憶體中,它的回收隻能靠垃圾收集器定期、不規律地回收,這就造成了以下後果:你用String引用存儲完一個密碼字元串之後,你可能讓這個引用指向别的字元串了,或者你這是個函數,函數傳回了,這個引用也就消失了,誰也不指了。但是!那個字元串是在堆空間裡的,哪怕沒人指它了,它也可能在堆裡存活一段時間。在這段時間裡,如果有心懷不軌的人複制你的記憶體,回去細細察看,就有可能分析出這段密碼。

三、為什麼基本資料類型的數組可以

如果你在一個函數中聲明了一個字元數組,那麼,當你臨時使用完這個數組存放密碼之後,你可以立刻把裡面填滿沒用的字元,把記憶體裡的密碼資訊蓋住。然後,假設函數傳回了,沒有引用指向這個字元數組了,那也無所謂,反正你把記憶體翻個底朝天,我的密碼已經不在了。雖然兩者都可能要等垃圾回收器不知猴年馬月才能到來的回收,但是,兩個人孤獨地存在的時候,身上的資訊是不同的。