Android studio 提示 Field can be converted to a local variable

 

今天提到的點,很基礎,大概就是:在定義的成員變量上面,可能會有提示:Field can be converted to a local variable 

意思就是 字段可以被轉化成一個局部變量。如下圖:

這個case,網上一堆的解釋,千篇一律,大部分只是在說如何去掉這個提示,解決方案有如下兩種:

1、@SuppressWarnings("FieldCanBeLocal")

2、把全局變量刪除,在使用的地方定義即可,不用全部都使用全局定義變量。

以上這都不是重點,也不算完,需要我們進一步考慮下,爲什麼會出這個提示,我們不按照建議修改代碼會有什麼影響,徹底弄懂這個問題,就需要去真正瞭解成員變量和局部變量的區別(往下看)👇

成員變量和局部變量的區別

    (1)在類中的位置不同
        成員變量:類中方法外
        局部變量:方法定義中或者方法聲明上
    (2)在內存中的位置不同
        成員變量:在堆中(方法區中的靜態區)
        局部變量:在棧中
    (3)生命週期不同
        成員變量:隨着對象的創建而存在,隨着對象的消失而消失
        局部變量:隨着方法的調用而存在,隨着方法的調用完畢而消失
    (4)初始化值不同
        成員變量:成員變量如果沒有被賦初值,則會自動以類型的默認值而賦值(一種情況例外被final修飾但沒有被static修飾的成員變量必須顯示地賦值) 
        局部變量:沒有默認值,必須定義,賦值,然後才能使用.

成員變量和局部變量區別,看到了這裏大家也就真正明白了,爲啥會提示了,重點就是:

成員變量生命週期比局部變量生命週期長,局部變量在方法消失之後,也就從內存中消失了,釋放所佔的內存。而如果一個變量只是一個局部變量,卻定義成了成員變量,那也就相當於這個變量在內存中的存在時間變長了。

說到這裏,可能有個別同學會說:“一個變量的事,不當緊不當緊,多存在一會沒事沒事”,那我就要說了,如果抱有這麼個“無所謂”的態度,那麼我敢冒昧的斷言:在你的項目工程中 這種“局部變量被定義爲成員變量”的情況應該還有。多個這種情況的存在,也就會額外增加內存的開銷了(至於到達多少量級的內存開銷 在這裏就不討論了,不一定),反正至少是,實現同樣的業務,存在這種情況的代碼,會比不存在的在內存佔比、使用上要高。嚴重的講,積少成多,會導致性能問題。你覺得呢?

今天貼出來這個簡單的、常見的case,主要是想表達一個思想:平時寫代碼就要嚴謹、對自己高要求、不要放過任何一個不合理的細節,養成良好的編碼習慣,以紮實的語言基本功爲理論依據,來編寫高質量代碼。這麼做,慢慢的、漸漸地,你會變的越來越優秀。

   以上,你認可嗎?

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