Jevas
Théorie et pratique de la programmation Pascal Fua
Que fait ce programme? class ClassA { int m_int; public ClassA(int val) { m_int = val; } public String toString() { return "" + m_int; } } public class ValueTest { // some member function modifying all the arguments private static void foo(int p_int, String p_str, ClassA p_obj) { p_int = p_int + 100; p_str = p_str + "xyz"; p_obj.m_int = 23; } public static void main(String args[]) { int some_int = 10; String some_str = "abc"; ClassA some_obj = new ClassA(-1); System.out.print("Before call to foo(): "); System.out.println(some_int + ", " + some_str + ", " + some_obj); foo(some_int, some_str, some_obj); System.out.print("After call to foo(): "); System.out.println(some_int + ", " + some_str + ", " + some_obj); } } Output: Before call to foo(): 10, abc, -1 After call to foo(): 10, abc, 23
2
Passage de paramètres en Java
Question: En java, les paramètres sont-ils passés par référence ou par valeur? Réponse pratique: En général, les objets de type “builtin” (e.g. int, String) se comportent comme s’ils étaient passés par valeur et les autres par référence. Réponse complète: Tous sont passés par référence MAIS Java implémente la notion d’immutabilité, qui signifie qu’un objet ne peut-être modifié après sa création.
3
Swap: Tentative #1 public class SwapTest1 { } Output: a: 1 b: 2 a: 1 b: 2 --> Aucun effet apparent!
private static void Swap(Integer a,Integer b){ Integer x=b; b=a; a=x; } public static void main(String args[]) { Integer a=1,b=2; System.out.println("a: "+ a + " b: "+ b); Swap(a,b); System.out.println("a: "+ a + " b: "+ b); }
4
Swap: Tentative #2 public class SwapTest2 { } static class Pair { int a,b; } public Pair(int val1,int val2) { a=val1; b=val2; } public String toString() { return "a: " + a + " b: " + b; } public void