2016-04-24 13 views
-1

Ich bin gerade von Xamarin/C# zu Android Studio/Java gewechselt und mache mich mit den Unähnlichkeiten zwischen den beiden Sprachen vertraut. Ich lese ein Android-Buch in Java geschrieben und kam in den beiden folgenden Codezeilen:Zwei (leicht?) Fragen zur Android/Java-Syntax

1)

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

In der ersten Zeile, ich bin verwirrt, wie preferencesChangeListener verwendet wird. In C# können Sie nicht einfach ein neues preferencesChangeListener-Objekt in ein Argument einfügen, ohne das Objekt zu instanziieren. Also, in Java, darfst du implizit instanziieren?

2)

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

Zweitens bin ich von der '&' Symbol hier verwendet verwirrt. Ich dachte, das Ampersand wurde für boolesche Argumente verwendet, aber Sie sehen hier, dass die linke Seite der Gleichheit eine Ganzzahl erwartet. Was ist denn hier los?

+1

'preferencesChangeListener' müsste in einem zum Zeitpunkt dieses Methodenaufrufs verfügbaren Umfang deklariert werden. Das '&' ist ein bitweiser AND-Operator in Java, wenn man an Zahlen arbeitet. – Kon

+0

Es sieht so aus als wäre 'preferenceChangeListener' ein Variablenverweis auf eine Objektinstanz. Gibt es keine vorherige Erklärung? 'PreferenceChangeListener preferenceChangeListener = new PreferenceChangeListener()' oder etwas ähnliches? – gmiley

+2

@Kon Sie meinen bitweise, && ist der logische UND-Operator – Natecat

Antwort

2
  1. Nein, Sie sind nicht implizit zu instanziiert erlaubt, und wenn diese Variable nicht dann instanziiert werden Sie wahrscheinlich eine NullPointerException bekommen, es sei denn, die Methode, die Sie nennen es wird als eine Ausgabe
  2. In den meisten verwenden Sprachen, einschließlich Java, && ist der boolesche Operator und & ist der bitweise Operator. & ist ein bitweises UND, also zum Beispiel (0101) & (1110) wäre (0100). In Ihrem Beispiel wird es verwendet, um bestimmte Bits auf Null zu setzen.