Bonjour,
c'est quoi la différence entre :
et :Code:private Set produitsupports = new HashSet();
MerciCode:private Set produitsupports ;
Version imprimable
Bonjour,
c'est quoi la différence entre :
et :Code:private Set produitsupports = new HashSet();
MerciCode:private Set produitsupports ;
Le premier est initialisé, l'autre non.
Le premier déclare une variable pour un objet de type Set à qui on affecte un objet HashSet.
Le second déclare juste une référence mais comme elle ne pointe sur rien, Il y aura une erreur à sa première utilisation, tant qu'on ne lui aura pas affecté un objet de type Set.
Salut,
Ici, non seulement tu crée ton objet, mais tu l'instancies. Par conséquent, tu vas pouvoir l'utiliser dans ton code sans voir lors de l'exécution des erreurs de type nullPointerException;Code:private Set produitsupports = new HashSet();
Ici, tu te contentes de créer ton objet, càd de lui allouer une case mémoire capable de contenir un Set sur ta machine, tous les appels à produitsupports pointeront sur cette case mémoire, mais il n'y a rien dedans. Tu indiques simplement que produitsupport est un Set, et ta machine se débrouille pour trouver une case mémoire de taille adaptée.Code:private Set produitsupports ;
Lors de l'exécution, tout appel à produitsupport renverra une erreur de type nullPointerException, à moins que tu instacies ton Set plus loin dans le code.
Voilà ;-)
l'allocation mémoire se fait lors de l'appel du new par lors de la déclaration. Donc tant que tu n'a pas fait de new, la mémoire pour l'objet n'est pas alloué. private Set produitsupports n'est qu'une référence sur un objet de type set. S'il y avait allocation a chaque nouvelle référence déclarée, ca en ferait de la mémoire gachée avec les références multiples.
La seule mémoire utilisée lors de la déclaration d'une référence est sur la pile pour stocker l'adresse de la référence justement.
si tu n'instancies pas produitsupports immédiatement
ça te laisse l'opportunité de choisir une implémentation plus tard dans ton code (Design Pattern stratégie par exemple).Code:
1
2private Set produitsupports ;
Mais tu peux être sûr de l'implémentation dont tu auras besoin, auquel cas tu peux l'initialiser à la déclaration.