[java] question sur un petit code
Fermé
lotfy25
Messages postés
15
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
12 avril 2011
-
11 avril 2011 à 20:18
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 12 avril 2011 à 11:36
KX Messages postés 16760 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 12 avril 2011 à 11:36
A voir également:
- [java] question sur un petit code
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Le code ascii - Guide
- Comment déverrouiller un téléphone quand on a oublié le code - Guide
- Code puk bloqué - Guide
3 réponses
triblekano
Messages postés
169
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
2 juin 2016
7
11 avril 2011 à 20:50
11 avril 2011 à 20:50
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);
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
11 avril 2011 à 21:02
11 avril 2011 à 21:02
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.
triblekano
Messages postés
169
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
2 juin 2016
7
11 avril 2011 à 21:12
11 avril 2011 à 21:12
non pour le 2 c'est a=this.a+7 est equivalent a y=a+7 car this.a c'est la variable de la classe pas le parametre
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
11 avril 2011 à 21:27
11 avril 2011 à 21:27
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 ^^
triblekano
Messages postés
169
Date d'inscription
vendredi 13 juin 2008
Statut
Membre
Dernière intervention
2 juin 2016
7
11 avril 2011 à 22:29
11 avril 2011 à 22:29
non j'ai dis que change l'instruction x.methode1(y);par
y=x.methode1(y);//y<-7
et pour x.methode1(2); aucune relation avec car ce n'est pas une variable renseigne toi sur le passage de paramétre par adresse et par valeur tu comprendra mieux
y=x.methode1(y);//y<-7
et pour x.methode1(2); aucune relation avec car ce n'est pas une variable renseigne toi sur le passage de paramétre par adresse et par valeur tu comprendra mieux
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
11 avril 2011 à 22:39
11 avril 2011 à 22:39
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
lotfy25
Messages postés
15
Date d'inscription
vendredi 17 mars 2006
Statut
Membre
Dernière intervention
12 avril 2011
1
12 avril 2011 à 04:40
12 avril 2011 à 04:40
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
KX
Messages postés
16760
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
12 avril 2011 à 11:36
12 avril 2011 à 11:36
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 } }