[java1.5] Danger de la boucle for(Object o : objects)
Code:
1 2 3 4 5 6 7 8 9
| public void test(){
String[] string = new String[2];
for (String s : string){
s = "test";
}
for (int i = 0; i < string.length; i++) {
System.out.println("string " + i + " = " + string[i]);
}
} |
Ce code va renvoyer dans la console :
string 0 = null
string 1 = null
Je n'avais jamais rencontré ce probleme avec java1.5 avant (car tres peu utilisé), mais c'est bien ennuyeux tout de meme.
Une petite question au passage, il y a t'il un moyen de pointer vers une variable a null ?
Re: [java1.5] Danger de la boucle for(Object o : objects)
Citation:
Envoyé par barksy
Code:
1 2 3 4 5 6 7 8 9
| public void test(){
String[] string = new String[2];
for (String s : string){
s = "test";
}
for (int i = 0; i < string.length; i++) {
System.out.println("string " + i + " = " + string[i]);
}
} |
Ce code va renvoyer dans la console :
string 0 = null
string 1 = null
Je n'avais jamais rencontré ce probleme avec java1.5 avant (car tres peu utilisé), mais c'est bien ennuyeux tout de meme.
Mais c'est un comportement tout à fait logique.
C'est comme si tu avais écrit
Code:
1 2 3 4 5 6 7 8 9 10
| public void test(){
String[] string = new String[2];
for (int i=0; i< string.length;i++){
String s = string[i];
s = "test";
}
for (int i = 0; i < string.length; i++) {
System.out.println("string " + i + " = " + string[i]);
}
} |
Et là, tu te rends bien compte que
Code:
1 2
| String s = string[i];
s = "test"; |
N'est pas du tout la même chose que
Code:
string[i] = "test";
Citation:
Une petite question au passage, il y a t'il un moyen de pointer vers une variable a null ?
Pas sûr de comprendre la question, mais si c'est ce genre de chose que tu veux dire
Code:
1 2
| String s1 = null; //variable s1 pointe vers une valeur null
String s2 = s1; //variable s2 pointe également sur null |
alors la réponse est oui.
Re: [java1.5] Danger de la boucle for(Object o : objects)
Citation:
Envoyé par barksy
Code:
1 2 3 4 5 6 7 8 9
| public void test(){
String[] string = new String[2];
for (String s : string){
s = "test";
}
for (int i = 0; i < string.length; i++) {
System.out.println("string " + i + " = " + string[i]);
}
} |
Ce code va renvoyer dans la console :
string 0 = null
string 1 = null
Je n'avais jamais rencontré ce probleme avec java1.5 avant (car tres peu utilisé), mais c'est bien ennuyeux tout de meme.
Une petite question au passage, il y a t'il un moyen de pointer vers une variable a null ?
il faudrait que tu revois tes cours de Java les String sont immutable non mais!!!!!
Re: [java1.5] Danger de la boucle for(Object o : objects)
Citation:
Envoyé par SEMPERE Benjamin
il faudrait que tu revois tes cours de Java les String sont immutable non mais!!!!!
Excuse moi Benjamin, mais cela n'a rien à voir avec le fait que les String soient immutables ou pas. Avec n'importe quel tableau d'objets, la deuxième boucle donnera toujours null.
Code:
1 2 3 4 5 6 7 8 9 10
|
Date[] dates = new Date[2];
for (Date d : dates) {
System.out.println("d: "+d);
d = new Date();
System.out.println("d: "+d);
}
for (int i = 0; i < dates.length; i++) {
System.out.println("Date " + i + " = " + dates[i]);
} |
donne également null. Or date n'est pas une classe immutable, comme l'est String.
cfr mon explication.
Re: [java1.5] Danger de la boucle for(Object o : objects)
Citation:
Envoyé par vbrabant
Citation:
Envoyé par SEMPERE Benjamin
il faudrait que tu revois tes cours de Java les String sont immutable non mais!!!!!
Excuse moi Benjamin, mais cela n'a rien à voir avec le fait que les String soient immutables ou pas. Avec n'importe quel tableau d'objets, la deuxième boucle donnera toujours null.
Code:
1 2 3 4 5 6 7 8 9 10
|
Date[] dates = new Date[2];
for (Date d : dates) {
System.out.println("d: "+d);
d = new Date();
System.out.println("d: "+d);
}
for (int i = 0; i < dates.length; i++) {
System.out.println("Date " + i + " = " + dates[i]);
} |
donne également null. Or date n'est pas une classe immutable, comme l'est String.
cfr mon explication.
Effectivement tu as raison :wink:
Tu modifies uniquement la reference de d dans la premiere boucle!!
Peut etre devrais je arreter la .... lol ou peut etre prendre plus le temps de lire les posts je l avoue...