Cela dépend de l'endroit où User user; apparaît, commençons par la conclusion :
S'il s'agit d'un attribut (champ) d'un objet, il n'y a pas de différence entre les deux méthodes d'écriture.
S'il s'agit d'une variable locale dans une méthode, s'il n'y a pas d'autre endroit dans la méthode pour attribuer une valeur à l'utilisateur, une erreur de compilation se produira.
S'il s'agit d'un attribut d'un objet, le compilateur Java attribuera automatiquement une valeur initiale au champ lors de la compilation (le type d'origine est la valeur par défaut ; le type de référence est nul). Par exemple, le code suivant :
public class TestInitialization {
private User userA;
}
Après la compilation, utilisez javap pour afficher le bytecode. La partie rouge est le processus par lequel le compilateur attribue automatiquement les valeurs initiales :
S'il s'agit d'une variable locale dans une méthode, le compilateur n'attribuera pas automatiquement de valeur initiale. User user;La variable user est uniquement définie, mais aucun espace n'est alloué à l'utilisateur dans la mémoire. Elle n'est pas initialisée et ne peut pas être compilée User user = null;Non seulement la variable user est définie, mais l'espace mémoire est également alloué à l'utilisateur, l'utilisateur pointe maintenant vers null.
Si user est une variable locale : l'utilisation de user avant la première affectation (y compris l'initialisation à null) est une erreur de compilation
Cela dépend de l'endroit où
User user;
apparaît, commençons par la conclusion :S'il s'agit d'un attribut (champ) d'un objet, il n'y a pas de différence entre les deux méthodes d'écriture.
S'il s'agit d'une variable locale dans une méthode, s'il n'y a pas d'autre endroit dans la méthode pour attribuer une valeur à l'utilisateur, une erreur de compilation se produira.
S'il s'agit d'un attribut d'un objet, le compilateur Java attribuera automatiquement une valeur initiale au champ lors de la compilation (le type d'origine est la valeur par défaut ; le type de référence est nul). Par exemple, le code suivant :
Après la compilation, utilisez javap pour afficher le bytecode. La partie rouge est le processus par lequel le compilateur attribue automatiquement les valeurs initiales :
S'il s'agit d'une variable locale dans une méthode, le compilateur n'attribuera pas automatiquement de valeur initiale.
User user;
La variable user est uniquement définie, mais aucun espace n'est alloué à l'utilisateur dans la mémoire. Elle n'est pas initialisée et ne peut pas être compiléeUser user = null;
Non seulement la variable user est définie, mais l'espace mémoire est également alloué à l'utilisateur, l'utilisateur pointe maintenant vers null.Si user est une variable locale : l'utilisation de user avant la première affectation (y compris l'initialisation à null) est une erreur de compilation
Il n'y a aucune différence après l'affectation
Il semble que ce soit pareil
Aucune différence, la valeur d'initialisation par défaut est nulle
Non= Aucun espace n'est créé pour lui dans la pile. L'ajout de =null spécifie un espace réservé vide
dans la pile.