web-dev-qa-db-fra.com

Initialiser int ou non?

Je vois que dans le code source Android, ils définissent quatre variables:

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

En Java, quelle est la différence en initialisant une variable à 0 ou non? Je ne comprends pas que dans certains compilateurs, je ne peux pas faire de comparaison sans initialiser le champ. Mais ce n'est pas le cas ici. Est-ce que cela a à voir avec l'optimisation? Ou est-ce juste une mauvaise pratique de codage?

13
Nouvel Travay

Selon types de données primitives Java turorial , tous les types de données primitifs ont une valeur par défaut. Donc, l'initialisation est implicite. Une bonne pratique: initialisez les valeurs avant de les utiliser pour éviter tout comportement inattendu.

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

Comme indiqué dans les commentaires, non, il n'y a pas de différence . Ils seront initalisés avec 0 implicitement. Cependant, si vous utilisez le bon IDE ou d’autres outils, il serait très facile pour vous de rechercher et de remplacer = 0; par = SomeOtherValueHere;

Aussi, je pense que c’est une bonne pratique de toujours initialiser vos variables avant de pouvoir y accéder.

1
Evdzhan Mustafa

C'est une bonne pratique de codage pour initialiser les variables.

À partir d'Oracle Docs:

Il n'est pas toujours nécessaire d'attribuer une valeur lorsqu'un champ est déclaré . Les champs déclarés mais non initialisés auront la valeur défaut raisonnable du compilateur. De manière générale, cette valeur par défaut sera nul ou nul, selon le type de données. S'appuyant sur tel Cependant, les valeurs par défaut sont généralement considérées comme une mauvaise programmation style.

Les avantages de initialiser les variables sont les suivants:

  1. Facilite le suivi de votre code
  2. Facilite la vie pour les outils d'analyse statique.
  3. La plupart des modèles de conception courants vous demandent d'initialiser la variable à une valeur par défaut, afin que le programmeur sache exactement à quelle valeur la variable est initialisée.
  4. Il est toujours recommandé d'initialiser les variables pour éviter tout comportement indéfini ultérieurement dans le programme. 
  5. Le débogage devient plus facile si vous initialisez les variables.
1
Pritam Banerjee

D'autres ont fait remarquer que les propriétés de classe sont initialisées avec les valeurs par défaut pour vous.

Donc, sémantiquement, il n'y a pas de différence si vous les définissez explicitement à 0 (ou, pour les propriétés de l'objet, à null).

Cependant, il peut en fait y avoir une différence au niveau du bytecode. Rien ne garantit que le code qui diffère uniquement dans les propriétés de classe implicitement vs explicitement défini sur les valeurs par défaut aura exactement le même bytecode.

Les anciennes versions du JDK étaient utilisées pour générer un code plus volumineux et plus long pour une initialisation explicite, facile à vérifier avec javap. (Ce fait a parfois été utilisé comme base pour les questions d'entrevue.) Je n'ai pas vérifié les versions récentes du JDK pour voir si c'était toujours le cas.

0
jdv