2011-07-23 75 views
4

我正在基於股票啓動器的android啓動器上工作。我只是感興趣爲什麼在方法中有很多全局變量被轉換爲局部變量Java在方法中將全局變量轉換爲局部變量的優點

final VelocityTracker velocityTracker = mVelocityTracker; 
velocityTracker.computeCurrentVelocity(1000); 

,而不是僅僅

mVelocityTracker.computeCurrentVelocity(1000); 

是它的一些Android的東西或者一般的Java規則?當直接訪問它時,分配新的VelocityTracker是沒有意義的。

編輯 是的這段代碼被重複多次。

+1

這可能是一個奇怪的優化,看到我的答案[這裏](http://stackoverflow.com/questions/6602922/is-it-faster-to-access-final-local-variables-than-class-variables -in-java的/ 6603067#6603067)。注意我沒有使用Android的經驗。 –

回答

4

如果您多次使用字段,這可能會很有用。有些JVM和我認爲Android虛擬機不能有效地優化對字段的訪問。

但是它可以被濫用,我不明白這一點,如果只訪問一次。

它也可能是有用的,你正在訪問一個易變的領域。這可以確保您在多次使用該字段時使用同一個對象。例如

volatile String text; 

String text = this.text; 
if(text != null) 
    doSomething(text); 

如果您沒有使用局部變量text可以是非空值的DoSomething的if語句和null()。

+2

關於易失性的有趣點 – AlexR

1

你是對的,在你的簡短例子中,這個任務沒有任何意義。但通常,最小化變量的範圍是一個好習慣。這使您可以專注於處理特定變量的特定代碼。

+1

當字段與變量一樣可訪問時,如何將字段賦值給局部變量有用?這是如何「最小化變量的範圍」? –