begin process at 2012 02 15 15:02:01
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

passage variable par référence


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

passage variable par référence

samedi 11 avril 2009 à 22:28:23 | passage variable par référence

Skyffer3

Membre Club
Bonjour, voici une question que je n'ai jamais eu à me poser et qui pourtant paraît très bête : le passage d'une variable, un int par exemple, par référence et non par valeur.

Si on veut modifier la valeur d'un entier grâce à une méthode, on peut faire un return bien sûr, mais si il y a plusieurs entiers, ... cela reste trop limité.
De plus si on veut qu'une variable est sa valeur toujours attachée à celle d'une autre variable, cela ne marche plus.
Je n'ai quasiment pas fait de C, mais en C avec un pointeur c'est immédiat. Alors en java, faut-il créer une classe exprès pour gérer ce cas, pour faire un passage par référence d'une classe contenant cet entier, ou peut-on simplement associé la valeur d'un entier à un autre.

Je donne un exemple (c'est pas du java, c'est juste pour comprendre) :
x=0
y=x // donc y = 0
x=2
//alors y=2 aussi
C'est ce que j'aimerai obtenir.

Voici un exemple que j'ai fait avec une classe pour palier le problème, mais est-on obligé de passer par une classe juste pour ça ?

public class Test3 {
    public static void main(String[] args) {
    Enveloppeur wrapper1 = new Enveloppeur(5);
    Enveloppeur wrapper2 = new Enveloppeur();
    System.out.println(wrapper1.getI());
    System.out.println(wrapper2.getI());
   
    Origin o = wrapper1.getO();
    wrapper2.setO(o);
    o=null;

    System.out.println(wrapper1.getI());
    System.out.println(wrapper2.getI());
   
    wrapper1.setI(6);
   
    System.out.println(wrapper1.getI());
    System.out.println(wrapper2.getI());
 }
}
class Enveloppeur {
private Origin o;
Enveloppeur(){
o = new Origin();   
}
Enveloppeur(int i){
    o = new Origin(i);   
}
public void setI(int i) {
    o.setOrigin(i);
}
public int getI() {
    return o.getOrigin();
}
public Origin getO() {
   
    return o;
}
public void setO(Origin o) {
    this.o=o;
}
}
   

class Origin { //wrapper
private int i;
Origin(){
    }
   
Origin(int i){
    setOrigin(i);
}
void setOrigin(int i){
    this.i=i;
}
int getOrigin(){
    return i;
}
}

Merci d'avance

++ et bonne prog

PS : enfin dernière question, avec le système que j'emploie, à cette ligne ci :

    Origin o = wrapper1.getO();
    wrapper2.setO(o);
    o=null;

Pourquoi si je la remplace par cela, ça ne marche plus : wrapper2.getO()=wrapper1.getO();

Je récupère l'instance o de wrapper2 que je fais pointer sur le même objet (Origin) que l'instance o de wrapper1 ??? non ?

Mais j'ai une erreur : the left-hand side of an assignment msut be a variable. (sous eclipse)


dimanche 12 avril 2009 à 20:42:11 | Re : passage variable par référence

uhrand

Réponse acceptée !
Dans Java, une classe telle que Integer agit en tant qu'emballage simple autour de ses contre-parties primitives -- dans ce cas-ci, int. Les emballages trouvés dans java.lang nous permettent de traiter les primitifs comme si ils étaient des objets. Ainsi, par exemple, vous ne pourriez pas mettre un int dans un vecteur sans l'envelopper avec un objet Integer d'abord. Les classes immuables offrent un certain nombre d'avantages. D'abord, une méthode ne peut pas changer un objet immuable d'une manière inattendue. Puisqu'une méthode ne peut pas laisser l'objet dans un certain état inattendu, vous évitez un certain nombre de bogues. En second lieu, un objet immuable est intrinsèquement "thread save". Puisqu'un "thread" ne peut pas changer l'objet, vous n'avez pas besoin de protéger l'objet contre l'accès concourant de "thread". Naturellement, si vous devez modifier vos instances d'Integer vous êtes hors de la chance. Vous pouvez écrire votre propre classe mutable d'emballage de nombre entier à l'usage de vos propres objets. Cependant, vous ne pouvez faire rien au sujet des tiers objets qui retournent des instance de java.lang.Integer.


Cette discussion est classée dans : int, origin, wrapper1, wrapper2, enveloppeur


Répondre à ce message

Sujets en rapport avec ce message

comment convertir un string en un int [ par bidules ] bonjour,Et bien tout est dans la question : j'aimerais convertir un string en int.evidement le string est en fait un entier.Merci. Position (X,Y) des JObjects en utilisant setAlignmentX (int) et setAlignmentY (int) [ par CSFCSTH ] CsFCStHBonjour a tousJe suis [b]étudiant[\b] et je cherche à savoir comment on peut positionner des [b]JButton[\b], [b]JList[\b], [b]JTextField[\b] su Prob débutant java [ par The Waxy Man ] salut, j'ai commencé un prog avec un petit menu mais j'ai un prob, a mon avis c'est dans mes classes !Merci et @++/*Réaliser une classe Etudiant. Chaq pixelgrabber - conversion RGB/int [ par lutecefalco ] qd on utilise un pixelgrabber et pixelgrab(), ça remplit un tableau d'entiers en fonction du code RGB.Je trouve pas l'algo qui permet de passer du cod Mon code bug pour un truc trop con [ par hallardc ] Voila je suis a l Institut International du Multimédia et je ne cromprends pas pourkoi mon source de java ne marche pas, si kelk un pouvait jeter un c Client/serveur [ par titou445 ] titou: serait il possible que l'on me donne le code pour receptionner et pour envoyer un tableau d'entiers svp?VOICI MON CODE:import java.net.*;import client/serveur [ par titou445 ] titou:> titou: serait il possible que l'on me donne le code pour receptionner et pour envoyer un tableau d'entiers svp?> VOICI MON CODE:> import java. Implementation des vecteurs [ par mkt2001 ] Bonjour a tous;Voila, j'ai un petit probleme....J'ai créé une classe qui comprend un champ de type Vector. Ce vecteur est en réalité un vecteur d'inte JNI: long int a quoi comme Native Type? [ par zebulaon ] Bonjour,Je cherche à savoir à mettre une variable C++ id : du type long int (enfin je crois que c'est ça qui correspond à: printf ("\nID______________ partie entière double -> int [ par jmg02001 ] bonjour, sauriez vous comment récupérer la partie entière d'un double dans un int?voici mes tentatives échouées: double latitude = 1.0;int degre_latit


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,359 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales