Passer un entier par adresse en JAVA
Résolu/Fermé
A voir également:
- Passer un entier par adresse en JAVA
- Darkino nouvelle adresse - Guide
- Waptrick java football - Télécharger - Jeux vidéo
- Rechercher ou entrer l'adresse - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
- Darkino : le grand site pirate change d'adresse et d'interface - Accueil - Services en ligne
11 réponses
Utilisateur anonyme
24 déc. 2003 à 13:43
24 déc. 2003 à 13:43
Hello, nouvel Essai (un peu tordu) ???
public class Essai
{
private Integer j;
public Essai()
{
j = new Integer(0);
}
public static void main (String args[])
{
Essai essai = new Essai();
essai.appelante();
}
public void testPassage(Integer i)
{
System.out.println("Avant modification " +i.toString());
j = i.valueOf("100");
System.out.println("Apres testPassage " + getJ().toString());
}
public void appelante()
{
Integer nb = new Integer(20);
testPassage(nb);
System.out.println("Apres testPassage " + j.toString());
}
public Integer getJ()
{
return j;
}
}
public class Essai
{
private Integer j;
public Essai()
{
j = new Integer(0);
}
public static void main (String args[])
{
Essai essai = new Essai();
essai.appelante();
}
public void testPassage(Integer i)
{
System.out.println("Avant modification " +i.toString());
j = i.valueOf("100");
System.out.println("Apres testPassage " + getJ().toString());
}
public void appelante()
{
Integer nb = new Integer(20);
testPassage(nb);
System.out.println("Apres testPassage " + j.toString());
}
public Integer getJ()
{
return j;
}
}
Utilisateur anonyme
23 déc. 2003 à 20:04
23 déc. 2003 à 20:04
Bonsoir,
Ne serais-tu pas en train de confondre le type numérique int et la classe Integer qui est la classe Wrapper du type numérique int?
Ne serais-tu pas en train de confondre le type numérique int et la classe Integer qui est la classe Wrapper du type numérique int?
Nan nan j'utilise bien un objet de type Integer comme argument pourtant ...
En gros, voilà un exemple simplifié de ce que j'voudrais faire :
public void test( Integer paramInteger) {
paramInteger = new Integer( valeurCalculee);
// ou qq choz ds ce gout la pour recupere une valeur dans paramInteger ...
}
public void methodeAppelante( ) {
Integer monInteger;
test(monInteger);
// ici monInteger a la valeur calculee dans la methode test
}
Remarque : tt en sachant que ma methode "test" renvoie en fait deja un objet et c'est pour ca que j'renvoie pas directement l'Integer
Merci de vouloir m'aider philtrain en tt cas :o)
En gros, voilà un exemple simplifié de ce que j'voudrais faire :
public void test( Integer paramInteger) {
paramInteger = new Integer( valeurCalculee);
// ou qq choz ds ce gout la pour recupere une valeur dans paramInteger ...
}
public void methodeAppelante( ) {
Integer monInteger;
test(monInteger);
// ici monInteger a la valeur calculee dans la methode test
}
Remarque : tt en sachant que ma methode "test" renvoie en fait deja un objet et c'est pour ca que j'renvoie pas directement l'Integer
Merci de vouloir m'aider philtrain en tt cas :o)
Utilisateur anonyme
23 déc. 2003 à 21:42
23 déc. 2003 à 21:42
re,
Je ne comprend pas trop ta démarche...
Pourquoi vouloir changer la valeur d'un entier en passant par un Wrapper?
paramInteger = new Integer(valeurCalculee); construit un nouvel objet de type Integer qui représente l'entier valeurCalculee
la méthode test ne renvoie rien du tout, elle est de type void.
Je ne comprend pas trop ta démarche...
Pourquoi vouloir changer la valeur d'un entier en passant par un Wrapper?
paramInteger = new Integer(valeurCalculee); construit un nouvel objet de type Integer qui représente l'entier valeurCalculee
la méthode test ne renvoie rien du tout, elle est de type void.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Heu vi vi test est de type void mais c'etait pour simplifier (finalement j'vois que ca ne brouille les cartes plus qu'autre chose !! :o)
La veritable méthode que j'ai codée renvoie un objet, c'est ce que je voulais dire ...
Ma demarche en C s'implementerai de cette facon :
float test( int *paramAmodifier) {
float reel;
*paramAmodifier = valeurEntiereCalculee;
reel = valeurReelleCalculee ;
return valeurReelle;
}
En gros ma méthode renvoie deja un objet ; mais j'ai également besoin en sortie de ce fameux entier ...
J'espere avoir ete clair :o/
Merci encore une fois !
La veritable méthode que j'ai codée renvoie un objet, c'est ce que je voulais dire ...
Ma demarche en C s'implementerai de cette facon :
float test( int *paramAmodifier) {
float reel;
*paramAmodifier = valeurEntiereCalculee;
reel = valeurReelleCalculee ;
return valeurReelle;
}
En gros ma méthode renvoie deja un objet ; mais j'ai également besoin en sortie de ce fameux entier ...
J'espere avoir ete clair :o/
Merci encore une fois !
Utilisateur anonyme
24 déc. 2003 à 01:42
24 déc. 2003 à 01:42
Ben alors, pour récupérer la valeur de l'enveloppeur sous forme d'un entier, il suffit de faire:
int monEntier = monInteger.intValue();
non?
int monEntier = monInteger.intValue();
non?
Vi vi ca j'suis d'accord, mais en fait j'sais pas modifier la valeur contenue dans le wrapper qd j'suis dans la méthode ...
Voilà le code java qui révèle mon problème :
public void testPassage(Integer nb) {
System.out.println("Avant modification " + nb.toString());
nb = nb.valueOf("100");
System.out.println("Apres modification " + nb.toString()); s
}
public void appelante() {
Integer nb = new Integer(20);
testPassage(nb);
System.out.println("Apres testPassage " + nb.toString());
}
Ca ca me donne :
Avant modification : 20
Apres modification : 100
Apres testPassage : 20
Tu vois mon probleme se situe au niveau de la ligne :
nb = nb.valueOf("100");
Qu'est-ce que j'pourrais faire pour réellement modifier la valeur qui est dans l'Integer nb, pour qu'en sortie de la méthode, j'récupère bien 100 ici ?
Merci en tt cas de te donner tt ce mal !
Voilà le code java qui révèle mon problème :
public void testPassage(Integer nb) {
System.out.println("Avant modification " + nb.toString());
nb = nb.valueOf("100");
System.out.println("Apres modification " + nb.toString()); s
}
public void appelante() {
Integer nb = new Integer(20);
testPassage(nb);
System.out.println("Apres testPassage " + nb.toString());
}
Ca ca me donne :
Avant modification : 20
Apres modification : 100
Apres testPassage : 20
Tu vois mon probleme se situe au niveau de la ligne :
nb = nb.valueOf("100");
Qu'est-ce que j'pourrais faire pour réellement modifier la valeur qui est dans l'Integer nb, pour qu'en sortie de la méthode, j'récupère bien 100 ici ?
Merci en tt cas de te donner tt ce mal !
Utilisateur anonyme
24 déc. 2003 à 11:04
24 déc. 2003 à 11:04
Bonjour,
Est-ce que ceci peut t'aider ?:
public class Essai
{
public static void main (String args[])
{
Essai essai = new Essai();
essai.appelante();
}
public Integer testPassage(Integer i)
{
System.out.println("Avant modification " +i.toString());
i = i.valueOf("100");
System.out.println("Apres testPassage " + i.toString());
return i;
}
public void appelante()
{
Integer nb = new Integer(20);
nb = testPassage(nb);
System.out.println("Apres testPassage " + nb.toString());
}
}
a+
Est-ce que ceci peut t'aider ?:
public class Essai
{
public static void main (String args[])
{
Essai essai = new Essai();
essai.appelante();
}
public Integer testPassage(Integer i)
{
System.out.println("Avant modification " +i.toString());
i = i.valueOf("100");
System.out.println("Apres testPassage " + i.toString());
return i;
}
public void appelante()
{
Integer nb = new Integer(20);
nb = testPassage(nb);
System.out.println("Apres testPassage " + nb.toString());
}
}
a+
Bonjour philtrain,
En fait dans mon véritable code, la méthode qui est représentée ici par testPassage( ), renvoie déjà qq chose ...
Du coup, je ne peux pas faire le :
return i;
C'est justement mon problème ... comment récupérer cette nouvelle valeur de i sans passer par un return ... :o/
Merci de te pencher sur la question :o)
En fait dans mon véritable code, la méthode qui est représentée ici par testPassage( ), renvoie déjà qq chose ...
Du coup, je ne peux pas faire le :
return i;
C'est justement mon problème ... comment récupérer cette nouvelle valeur de i sans passer par un return ... :o/
Merci de te pencher sur la question :o)
grofwa
Messages postés
440
Date d'inscription
jeudi 24 juillet 2003
Statut
Membre
Dernière intervention
21 juillet 2006
479
24 déc. 2003 à 11:20
24 déc. 2003 à 11:20
Lis ceci, ça pourrait t'intéresser :
http://www.dimi.uniud.it/labs/documentazione/java/tips/Tip39.html
M.
http://www.dimi.uniud.it/labs/documentazione/java/tips/Tip39.html
M.
2 avril 2008 à 15:38
Voici ce que j'ai compris:
Les types primitifs (int, float, etc.: qui commencent par une minuscule) sont passés par valeur.
Les types complexes (tous les autres, tous les objets) sont passés par référence MAIS certains d'entre eux sont IMMUTABLES (tous les wrappers: Integer, Float, etc. + String + ?), autrement dit, lorsqu'ils sont modifiés, une nouvelle zone mémoire est créée...
Conséquence: lorsque l'on passe un type immutable comme paramètre à une méthode, on passe la référence, mais dès la 1ère modification, une autre zone est créée, donc dans la méthode appelante, le paramètre n'est pas mis à jour!
Solution: créer une classe qui encapsule le type primitif ou le wrapper.
C'est clair?