wake-up-neo.com

Int initialisieren oder nicht?

Im Android-Quellcode sehe ich, dass sie vier Variablen als definieren

protected int mPaddingRight = 0;
protected int mPaddingLeft = 0;
protected int mPaddingTop;
protected int mPaddingBottom;

Was ist der Unterschied bei der Initialisierung einer Variablen auf 0 oder nicht in Java? Ich verstehe nicht, dass ich bei manchen Compilern keinen Vergleich durchführen kann, wenn ich das Feld nicht initialisiert habe. Dies ist hier jedoch nicht der Fall. Hat das mit Optimierung zu tun? Oder ist dies nur eine inkonsistente/schlechte Kodierungspraxis?

13
Nouvel Travay

Gemäß Java-Grunddatentypen turorial haben alle Grunddatentypen einen Standardwert. Die Initialisierung ist also implizit. Eine bewährte Methode: Werte vor der Verwendung initialisieren, um unerwartetes Verhalten zu vermeiden.

byte    0
short   0
int 0
long    0L
float   0.0f
double  0.0d
char    '\u0000'
String (or any object)      null
boolean false
14
F.Igor

Wie in den Kommentaren erwähnt, ist nein, es gibt keinen Unterschied . Sie werden implizit mit 0 initialisiert. Wenn Sie jedoch gutes IDE verwenden oder über andere Tools verfügen, ist es sehr einfach für Sie, = 0; durch = SomeOtherValueHere; zu suchen und zu ersetzen. 

Ich denke auch, dass es eine gute Praxis ist, Ihre Variablen immer zu initialisieren, bevor Sie auf sie zugreifen.

1
Evdzhan Mustafa

Es ist eine gute Kodierungsmethode, um Variablen zu initialisieren.

Von Oracle Docs:

Es ist nicht immer erforderlich, einen Wert zuzuweisen, wenn ein Feld deklariert ist . Felder, die deklariert, aber nicht initialisiert wurden, werden auf eine .__ gesetzt. angemessene Vorgabe des Compilers. Im Allgemeinen ist diese Voreinstellung ist je nach Datentyp null oder null. Verlassen sich auf solche Standardwerte werden jedoch im Allgemeinen als schlechte Programmierung angesehen Stil.

Die Vorteile von Initialisieren der Variablen sind wie folgt:

  1. Erleichtert das Befolgen des Codes
  2. Erleichtert statische Analysewerkzeuge das Leben.
  3. Bei den meisten der vorherrschenden Entwurfsmuster werden Sie aufgefordert, die Variable auf einen Standardwert zu initialisieren, sodass der Programmierer genau weiß, zu welchem ​​Wert die Variable initialisiert wird.
  4. Es ist immer ratsam, Variablen zu initialisieren, um undefiniertes Verhalten später im Programm zu verhindern. 
  5. Das Debuggen wird einfacher, wenn Sie die Variablen initialisieren.
1
Pritam Banerjee

Andere haben darauf hingewiesen, dass Klasseneigenschaften für Sie mit Standardwerten initialisiert werden.

Semantisch gibt es also keinen Unterschied, wenn Sie sie explizit auf 0 setzen (oder für Objekteigenschaften auf null setzen.)

Es kann jedoch tatsächlich ein Unterschied auf der Bytecode-Ebene geben. Es gibt keine Garantie dafür, dass Code, der sich nur in Klasseneigenschaften unterscheidet, die implizit oder explizit auf Standardwerte gesetzt sind, genau denselben Bytecode haben.

Ältere Versionen des JDK verwendeten zur Generierung größerer und längerer Codes für die explizite Initialisierung, die leicht mit javap überprüft werden konnte. (Diese Tatsache wurde gelegentlich als Grundlage für Interviewfragen verwendet.) Ich habe in den letzten Versionen des JDK nicht nachgeprüft, ob dies immer noch der Fall ist.

0
jdv