Unterschied zwischen lokaler Variable null initialisieren und nicht initialisieren?

8

Was ist in Java der Unterschied und der beste Weg?

%Vor%     
Damith Ganegoda 02.10.2014, 11:54
quelle

6 Antworten

7

Die Antwort hängt davon ab, auf welchen Typ von Variablen Sie sich beziehen.

Für Klassenvariablen gibt es keinen Unterschied, siehe JLS - 4.12.5. Anfangswerte von Variablen :

  

... Jede Variable in einem Programm muss einen Wert vor ihrem Wert haben   verwendet:

     

Für alle Referenztypen ( §4.3 ), der Standardwert ist null .

Das heißt, es gibt keinen Unterschied, der letztere wird implizit auf null gesetzt.

Wenn die Variablen lokal sind, müssen sie zugewiesen werden, bevor Sie sie an eine Methode übergeben:

%Vor%     
Maroun 02.10.2014, 11:57
quelle
3

Es ist besser, es nicht auf null zu setzen, sonst können Sie es versehentlich verwenden und NPE verursachen. Der Compiler hilft Ihnen nicht bei der Kompilierung. Wird nur auf null gesetzt, wenn Sie eine Logik wie if (x! = Null) haben wollen {/ verwenden Sie /}

    
marcinj 02.10.2014 12:00
quelle
3

Lokale Variablen müssen etwas zugewiesen werden, bevor sie verwendet werden.

%Vor%

Klassenvariablen werden immer auf einen Standardwert ( null für Objekttypen, etwa Null für Primitive) initialisiert, wenn Sie sie nicht explizit initialisieren. Lokale Variablen werden nicht implizit initialisiert.

    
khelwood 02.10.2014 12:00
quelle
3

Kein Unterschied. In beiden Fällen muss die lokale Variable immer initialisiert sein (muss einen Wert haben).

Von Java doc

  

Ähnlich wie ein Objekt seinen Zustand in Feldern speichert, wird dies eine Methode sein   oft seinen temporären Zustand in lokalen Variablen speichern. Die Syntax für   Die Deklaration einer lokalen Variablen ähnelt der Deklaration eines Feldes (z   Beispiel: int count = 0;). Es gibt kein spezielles Schlüsselwort, das a bezeichnet   Variable als lokal; Diese Bestimmung kommt ausschließlich aus dem Ort   in dem die Variable deklariert ist - was zwischen der Eröffnung und der   geschweifte Klammern einer Methode schließen Daher sind lokale Variablen nur sichtbar   zu den Methoden, in denen sie erklärt werden; Sie sind nicht zugänglich   vom Rest der Klasse.

    
Ruchira Gayan Ranaweera 02.10.2014 11:55
quelle
1

Keine Unterschiede erwarten Sie für eine Sache, wenn Sie es nicht initialisieren und später versuchen, diese Variable zu verwenden (ohne die Referenz zu ändern) bedeutet einen Fehler bei der Kompilierung, aber wenn Sie es initialisieren und Sie es verwenden später (ohne die Referenz zu ändern) bedeutet eine NullPointerException.

Ich zeige Ihnen ein Beispiel.

Ohne Initialisierung

%Vor%

Bei der Initialisierung

%Vor%     
ginxo 02.10.2014 12:04
quelle
1

Intern gibt es keinen Unterschied. Es ist auch ein strittiges Thema.

Verwenden Sie die lokale Variable nur, wenn sie wirklich benötigt wird. Lokale Variablen sind meistens in den folgenden Szenarien (ich vermisse einige wenige andere).

Als Kurzschrift oder zur Lesbarkeit

%Vor%

Wenn wir die Syntax an vielen Stellen so verwenden, wird der Code unhandlich.

Für die Barrierefreiheit

%Vor%

Der Aufrufer des obigen Code-Snippets trifft die Entscheidung basierend auf dem Rückgabewert. Ehrlich gesagt, sehe ich keinen anderen gültigen Anwendungsfall, um eine Variable ohne Anfangswert zu deklarieren.

Fazit (Best Practice):

  • Lokale Variable nur bei Bedarf deklarieren
  • Erstellen Sie immer lokale Variable mit dem Standardwert.
thangamanikasi 02.10.2014 12:11
quelle

Tags und Links