2016-04-24 3 views
-1

Xamarin/C#からAndroid Studio/Javaに切り替えたところ、2つの言語の相違点に慣れてきました。私はJavaで書かれたAndroidの本を読み、次の2行のコードに出くわしたんだ:Android/Javaの2つの簡単な質問

1)最初の行で

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

、私はpreferencesChangeListenerが使用されている方法で混乱しています。 C#では、オブジェクトをインスタンス化することなく、新しいpreferencesChangeListenerオブジェクトを引数に投げることはできません。だからJavaでは、暗黙的にインスタンス化することが許されていますか?

2)

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

第二に、私はここで使用される '&' 記号で混乱しています。私はアンパサンドがブール引数に使われていると思っていましたが、ここでは、平等の左辺が整数を期待していることがわかります。何が起きてる?あなたはそれを呼び出している方法は、ほとんどの出力

  • としてそれを使用していない限り、あなたは、暗黙的にインスタンス化することはできませんし、その変数がインスタンス化されていない場合、あなたはおそらくNullPointerExceptionを取得します

  • +1

    'preferencesChangeListener'は、そのメソッド呼び出し時に利用可能ないくつかのスコープで宣言する必要があります。 '&'はJavaのビット演算子であり、数値を扱うときは – Kon

    +0

    'preferenceChangeListener'はオブジェクトインスタンスへの変数参照です。事前の宣言はありませんか? 'PreferenceChangeListener preferenceChangeListener =新しいPreferenceChangeListener()'またはそれに類するもの? – gmiley

    +2

    @Konビット単位で、&&は論理AND演算子です – Natecat

    答えて

    2
    1. 言語を含むjava、&&は論理演算子であり、&はビット演算子です。 &はビット単位のANDであるため、たとえば(0101) & (1110)(0100)となります。あなたの例では、特定のビットをゼロにするために使用されています。