[java] question sur un petit code
lotfy25
Messages postés
16
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
J'ai deux question sur ce programme:
public class prog2{
public static void main(String [] argv){
Un x=new Un(); float y=10;
x.methode1(y);
System.out.println(y);
}
}
class Un {
int a;
public void methode1(float a)
{ a = this.a + 7 ;
System.out.println(a);}
}
RESULTAT/
7.0
10.0
1- la variable de classe "a" n'est pas initialisé pourquoi il n'affiche pas une erreur au niveau de l'affectation "a = this.a + 7"
2- pourquoi la variable "y" reste toujours 10.0 et elle n'a pas pris la valeur 7.0
J'ai deux question sur ce programme:
public class prog2{
public static void main(String [] argv){
Un x=new Un(); float y=10;
x.methode1(y);
System.out.println(y);
}
}
class Un {
int a;
public void methode1(float a)
{ a = this.a + 7 ;
System.out.println(a);}
}
RESULTAT/
7.0
10.0
1- la variable de classe "a" n'est pas initialisé pourquoi il n'affiche pas une erreur au niveau de l'affectation "a = this.a + 7"
2- pourquoi la variable "y" reste toujours 10.0 et elle n'a pas pris la valeur 7.0
A voir également:
- [java] question sur un petit code
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Waptrick java voiture - Télécharger - Jeux vidéo
3 réponses
Bonjour
1-en java les entier non initialisé egaleron 0 donc this.a =0
2-pour la deux j'ai pas vraiment une bonne réponse car je sais pas trop comment se fait le passage de parametre mais si tu veux tu poura metre
public int methode1(float a)
{
a = this.a + 7 ;
System.out.println(a);
return a;
}
et
y=x.methode1(y);
aux lieux de x.methode1(y);
1-en java les entier non initialisé egaleron 0 donc this.a =0
2-pour la deux j'ai pas vraiment une bonne réponse car je sais pas trop comment se fait le passage de parametre mais si tu veux tu poura metre
public int methode1(float a)
{
a = this.a + 7 ;
System.out.println(a);
return a;
}
et
y=x.methode1(y);
aux lieux de x.methode1(y);
1) la variable 'a' est initialisée à 0 par le super constructeur.
2) la variable 'y' n'est pas modifiée car elle est copiée 'a=y' lors de l'appel de la fonction.
2) la variable 'y' n'est pas modifiée car elle est copiée 'a=y' lors de l'appel de la fonction.
Non, à ce moment là, le 'y' n'est plus pris en compte !!!
Remarque : une manière de s'en convaincre est d'imaginer ce qui se passerait si on faisait x.methode1(2); est-ce que tous les 2 deviendraient des 9 ? ça m'étonnerait ^^
Un x=new Un(); // x.a <-- 0
float y=10; // y <-- 10
x.methode1(y); // methode1.a <-- 10 : on prend la valeur de y
{
a = this.a + 7 ; // methode1.a <-- 7 (x.a + 7 = 0 + 7 = 7)
System.out.println(a); // affichage de methode1.a --> 7
return a; // methode1.a --> 7
}
System.out.println(y); // affichage de y --> 10 : car y n'a jamais été modifié !
Remarque : une manière de s'en convaincre est d'imaginer ce qui se passerait si on faisait x.methode1(2); est-ce que tous les 2 deviendraient des 9 ? ça m'étonnerait ^^
Ne t'inquiètes pas pour moi, je suis très bien renseigné !
Il n'y a pas de passage par adresse en Java ! D'ailleurs les adresses et les pointeurs... ça n'existe pas !
En Java, on parle de passage par référence, et la valeur 2 est tout à fait correct pour un float.
Tu n'as qu'à tester x.methode1(2) si tu ne me crois pas... ça donnera le même résultat : 7
Il n'y a pas de passage par adresse en Java ! D'ailleurs les adresses et les pointeurs... ça n'existe pas !
En Java, on parle de passage par référence, et la valeur 2 est tout à fait correct pour un float.
Tu n'as qu'à tester x.methode1(2) si tu ne me crois pas... ça donnera le même résultat : 7
Merci à vous deux
J'ai compris que tous les passages de paramètre de méthodes se font par copie et les variables d'origine ne sont jamais affectées
J'ai compris que tous les passages de paramètre de méthodes se font par copie et les variables d'origine ne sont jamais affectées
Attention, ce n'est pas une copie en profondeur !
C'est pour ça qu'on parle de passage par référence et non de passage par copie...
Exemple :
C'est pour ça qu'on parle de passage par référence et non de passage par copie...
Exemple :
public class prog2
{
public static void methode2(Un u) // u est une copie
{
u.a = 3; // u.a n'est pas une copie
}
public static void methode3(Un u)
{
u = new Un();
}
public static void main(String [] argv)
{
Un x=new Un();
System.out.println(x.a); // x.a --> 0
methode2(x); // u et x sont différents, mais u.a et x.a sont identiques !
System.out.println(x.a); // x.a --> 3
methode3(x); // on modifie u mais pas x, u.a ne correspond plus à x.a
// donc u.a est initialisé à 0, mais ça n'affecte pas x.a
System.out.println(x.a); // x.a --> 3
}
}