2016-04-24 107 views
-1

我剛從Xamarin/C#切換到Android Studio/Java,並熟悉兩種語言之間的差異。我在讀java寫的一個機器人的書,偶然發現的代碼如下兩行:兩個(簡單?)Android/Java語法問題

1)

PreferenceManager.getDefaultSharedPreferences(this) 
    .registerOnSharedPreferenceChangeListener(preferencesChangeListener); 

在第一行,我對preferencesChangeListener如何使用混淆。在C#中,你不能僅僅將一個新的preferencesChangeListener對象拋到一個參數中而不需要實例化對象。所以在Java中,你允許隱式實例化嗎?

2)

int screenSize = getResources().getConfiguration().screenLayout & 
    Configuration.SCREENLAYOUT_SIZE_MASK; 

其次,我對這裏使用的 '&' 符號混淆。我認爲&符號用於布爾參數,但您在這裏看到,等號的左邊等於一個整數。這裏發生了什麼?

+1

'preferencesChangeListener'必須在該方法調用時可用的某個範圍內聲明。在處理數字時,'&'是Java中按位與運算符 – Kon

+0

它看起來像'preferenceChangeListener'是對對象實例的變量引用。有沒有事先聲明? 'PreferenceChangeListener preferenceChangeListener = new PreferenceChangeListener()'或類似的東西? – gmiley

+2

@Kon你的意思是按位,&&是邏輯AND運算符 – Natecat

回答

2
  1. 不,你不能隱式實例化,如果這個變量未被實例化,你可能會得到一個NullPointerException,除非你調用它的方法是使用它作爲一個輸出
  2. 在大多數語言,包括java,&&是布爾運算符,&是按位運算符。 &是一個按位與,因此例如(0101) & (1110)將是(0100)。在你的例子中,它被用來清零某些位。