Method Argument are passed “by value” “by copy”
Correct but incomplete

Reject Casting
Reject Casting
Reject Casting

2 Types d’expressions dans une seule JVM

  • Primitive : Value is “The Value”
  • Object/Reference : Value is the Pointer (the reference) Adresse Memoire qui pointe vers l’objet

Q??
Q??

Q16

Q17

Classes Wrapper

Ex:

1
2
3
4
5
6
7
8
9
10
11
12
public class Ex {

public static void main(String[] args) {
Integer x = 99;
Ex.add(x); //copy de la valeur de l'adresse memoire
System.out.println("Valeur de x " + x); -> 99
}

public static void add(Integer y) {
y = y + 1; // y est converti en int pour effectuer le +, puis autobxing en Integer en créant un nouvel objet
}
}

Remarques

  • String est IMMUTABLE
  • StringBuffer n’est pas IMMUTABLE
  • Les classes Wrappers des primitives sont IMMUTABLES

Examples

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class Ex {

public static void main(String[] args) {
int x = 99;
Ex.add(x); //copy de la valeur
System.out.println("Valeur de x " + x);

// Wrapper de primitives
Integer a = 99;
add(a);
System.out.println("Valeur de a : " + a);

int [] arr = {99};
Ex.add(arr); //copy de l'adresse memoire
System.out.println("Valeur de arr[0] " + arr[0] );


StringBuilder sb = new StringBuilder("Hello");
Ex.add(sb); //copy de l'adresse memoire
System.out.println("Valeur de sb " + sb );


Ex.appender(sb); //copy de l'adresse memoire
System.out.println("Valeur de sb " + sb );



String str = "Bonjour";
Ex.changeStr(str);
System.out.println("Valeur de str " + str);


}

private static void changeStr(String str) {
str += " Les amis"; // autre object créé avec nouvelle adresse mémoire
}

private static void add(StringBuilder sb) {
sb = new StringBuilder("GoodBye"); // autre object créé avec nouvelle adresse mémoire
}

private static void appender(StringBuilder sb) {
sb.append(" World"); // on travaille sur le meme object
}


public static void add(int y) {
y = y + 1;
}

public static void add(Integer y) {
y = y + 1; // y est converti en int pour effectuer le +, puis autobxing en Integer en créant un nouvel objet
}

public static void add(int[] y) {
y[0] = y[0] + 1; //
}
}