Voilà, je programme en C et C++ et je dois passer à Java.
Je suis en peeuut pperdu pour ce qui se passe en mémoire.

J'ai le code suivant :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
public class StringObject {
 
 
 
    void addString(String s1, String s2) {
        s1 = s1 + s2;
        // Marque 3
    }
 
    public static void main(String[] args) {
 
        StringObject ref = new StringObject();
        String mystring = "Give ";
        StringBuffer mybuffer = new StringBuffer("Give ");
        // Marque 1
 
 
        mystring = mystring + "me six ";
        mybuffer.append("me six ");
        // Marque 2
 
        ref.addString(mystring, "lines");
        mybuffer.append("lines");
        // Marque 4
 
        System.out.println(mystring);
        System.out.println(mybuffer);
    }
}
La sortie est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Give me six
Give me six lines
Si je comprend ce qui arrive à StringBuffer (occurence : mybuffer) je ne comprend pas ce qui arrive à mystring :

Particuliérement cette ligne :
ref.addString(mystring, "lines");

Que représente ref ? Que fait AddString au niveau de la mémoire ? Que ce qui est accessible au niveau de marque 3.

S'il n'ajoute pas "lines" c'est parce que la fonction ne retourne rien et que addString est call by value ?