houla. j'ai de plus en plus peur...
Si tu preferes avec une classe mutable, prenons StringBuffer...
A mon avis tu confonds "reference d'un objet" et "passage par reference d'un argument". Dans l'exemple que tu as donné, tu as utilisé comme argument une "reference d' objet". Pour autant, ce qui est utilisé par la methode c'est la "valeur" de l'argument et non pas sa "reference".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public class Test { public static void someMethod(StringBuffer sb) { sb = new StringBuffer("world !"); } public static void main(String[] args) { StringBuffer sb = new StringBuffer("hello"); someMethod(sb); System.out.println(sb); // <-- que vaut sb d'après toi ? } }
Pour information, et afin de ne pas laisser trop d'erreur sur un site de developpement:
En Java, tous les arguments sont passés par valeur (preuve ici par java.sun.com)
En C#, par défaut, les arguments sont passés par valeur. On peut les passer par reference en utilisant explicitement le mot clé "out" ou "ref" (preuve ici par msdn2.microsoft.com)
Partager