Utilisateur anonyme
-
11 avril 2009 à 22:28
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 2012
-
12 avril 2009 à 20:42
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());
}
}
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() {
uhrand
Messages postés491Date d'inscriptionsamedi 20 mai 2006StatutMembreDernière intervention15 juillet 20129 12 avril 2009 à 20:42
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.