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?
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
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.
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:
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.