Bonjour,
je débute un peu en java et je rencontre un problème qui semble lié à des références mais je n'arrive pas à comprendre pourquoi et je ne trouve pas de solution.
J'ai refais un morceau de code simplifié qui reprend mon problème :
Pour faire simple, la classe IspDb contient une arrayList de la classe Isp. L'objectif est d'avoir une liste d'host et d'adresse.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 import java.util.ArrayList; class Isp { public String serverHostname; public String serverAddress; public Isp() { this.serverHostname = null; this.serverAddress = null; } } class IspDb { private ArrayList<Isp> ispCatalog; public IspDb() { super(); this.ispCatalog = new ArrayList<Isp>(); } public void go() { Isp isp = new Isp(); isp.serverHostname = "host1.fr"; isp.serverAddress = "1.1.1.1"; this.ispCatalog.add(isp); isp.serverHostname = "host2.fr"; isp.serverAddress = "2.2.2.2"; this.ispCatalog.add(isp); } public void affiche() { for (Isp i : this.ispCatalog) { System.out.println("Host=" + i.serverHostname + " ; Adresse=" + i.serverAddress); } } } public class Bonjour { public static void main(String[] args) { IspDb ispdb = new IspDb(); ispdb.go(); ispdb.affiche(); } }
La fonction GO instancie un objet ISP, pose une valeur pour chaque variable et fait un ADD dans ispCatalog. Jusque là, cela me semble logique.
Par contre, lorsque je parcours la liste, tous les éléments sont aux valeurs du dernier add. En debug, je vois bien que l'insertion du second "remplace" le premier.
Quelqu'un pourrait m'expliquer ce que je fais de travers ?
Merci d'avance.
Partager