Rechercher : dans
Par :

Passer un entier par adresse en JAVA

Dernière réponse le 2 avr 2008 à 15:38:31 Mr Debutant, le 23 déc 2003 à 18:01:08 
 Signaler ce message aux modérateurs

Salut à tous !

Wouala ... la question me semble super bidon ... n'empeche que j'coince !

Lors d'un appel à une méthode, je veux changer la valeur d'un entier ... ce qui se ferait en C par un passage par adresse.

Donc là j'utilise l'objet Integer (puisque les objets sont passés par référence), le hic c'est que j'trouve pas de méthode qui modifie la valeur d'un Integer ...
y a que des affectations du genre :
monInteger = new Integer( 10 ) ;

Mais ca ca marche pas puisque ca change la référence de l'objet et pas la valeur de l'entier...

Z'auriez une solution ???


Merci d'avance a tous !!

Bonne fetes :)

Meilleures réponses pour « Passer un entier par adresse en JAVA » dans :
IPhone: 'Échec d'autorisation. Veuillez vous connecter à iTunes' VoirVous venez d'installer la dernière mise à jour de l'iPhone et vous souhaitez profiter des applications téléchargées depuis l'App Store, mais l'iPhone refuse votre identifiant et votre mot de passe en affichant le message d'erreur ci-contre. Pour y...
[Messagerie] Pirater une boite mail (msn, hotmail, yahoo...) VoirVous avez le stupide projet de pirater une boîte mail et vous cherchez la procédure à suivre pour le faire ? Vous êtes donc la cible idéale pour jouer le rôle de l'arroseur arrosé. NE TOMBEZ PAS DANS CE PIÈGE En effet, en ce moment circule sur les...
[WiFi] Réseau sans fil et sécurité VoirDéfinition Infrastructure réseau Sécurité Définition Le Wifi est une technologie permettant de créer des réseaux informatiques sans fil (Wireless). Il s'agit d'une norme de l'IEEE baptisée 802.11. Sa portée varie d'un appareil à...
Télécharger NetBeans IDE 6.1 VoirNetBeans IDE 6.1 est un excellent IDE de développement C/C++ écrit entièrement en Java. La coloration syntaxique, le "Code Completion" et plein d'autres options font naturellement parti de NetBeans. Un des principal atout de NetBeans est qu'il...
Tests et diagnostics du réseau VoirTester la configuration IP Avant toute chose, il est recommandé de véfier la configuration IP de l'ordinateur. Les systèmes Windows proposent un outil en ligne de commande, appelé ipconfig permettant de connaître la configuration IP de...
Javascript - les boîtes de dialogue VoirQu'est-ce qu'une boîte de dialogue? Une boîte de dialogue est une fenêtre qui s'affiche au premier plan suite à un événement, et qui permet Soit d'avertir l'utilisateur Soit le confronter à un choix Soit lui demander de compléter un champ pour...

1

philtrain, le 23 déc 2003 à 20:04:57

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?

Répondre à philtrain

2

Mr Debutant, le 23 déc 2003 à 20:57:21

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)

Répondre à Mr Debutant

3

philtrain, le 23 déc 2003 à 21:42:33

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.

Répondre à philtrain

4

Mr Debutant, le 23 déc 2003 à 22:38:55

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 !

Répondre à Mr Debutant

5

philtrain, le 24 déc 2003 à 01:42:55

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?

Répondre à philtrain

6

Mr Debutant, le 24 déc 2003 à 09:54:05

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 !

Répondre à Mr Debutant

7

philtrain, le 24 déc 2003 à 11:04:58

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+

Répondre à philtrain

8

Mr Debutant, le 24 déc 2003 à 11:18:33

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)

Répondre à Mr Debutant

9

grofwa, le 24 déc 2003 à 11:20:01
Répondre à grofwa

10

philtrain, le 24 déc 2003 à 13:43:49

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;
}

}

Répondre à philtrain

11

 jo, le 2 avr 2008 à 15:38:31
  • +2

J'arrive un peu tard ;), mais bon, ça peut toujours aider...
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?

Répondre à jo