Bonjour à tous !
Mon titre n'est peut-être pas très évocateur mais je vais vous faire comprendre exactement ma question.
Au cours de mon cursus scolaire mes profs m'ont répété qu'en JAVA, TOUT est un pointeur. De ce fait, si je passe en argument d'une méthode un objet, qui est modifié dans celle-ci, il restera modifié par la suite.
(Si je me trompe dites-le moi car c'est un point crucial que je souhaite éclaircir et qui me bloque !!!)
De ce fait j'ai récolté une jolie NullPointerException (qu'est-ce qu'on l'aime beaucoup celle là bizarrement ) qui m'a fait cherché un peu plus sur internet et là, peu de réponse précises.
Soit le code suivant :
A votre avis ? Que va afficher la console ?
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 package testpointeur; public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { int a = 3; test(a); System.out.println("a vaut " + a); } public static void test (int a) { a++; } }
Et bien elle va afficher 3 ! Bon... OK vous allez me dire, c'est un int c'est normal ! Et bien testez la même chose avec la classe Integer vous aurez le même résultat !
Bon par contre si maintenant on travaille avec un int[] cela donne :
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 package testpointeur; public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { Integer a = new Integer(3); test(a); System.out.println("a vaut " + a); } public static void test (Integer a) { a++; } }Qu'obtient-on ? Je vous le donne en mille : "a vaut 4"
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 package testpointeur; public class Main { /** * @param args the command line arguments */ public static void main(String[] args) { int [] a = new int[1]; a[0] = 3; test(a); System.out.println("a vaut " + a[0]); } public static void test (int[] a) { a[0]++; } }
Ce qui m'amène à ma question :
Quand est-ce qu'une variable / instance d'un objet est-elle considérée comme un pointeur ? Car là j'ai créé une classe héritant d'un JPanel que j'initialise à 'null' et qui va être instancié dans une méthode d'une autre classe... Problème c'est qu'après cette méthode j'ai toujours ma variable qui vaut 'null' et donc j'obtiens une belle exception de type NullPointer.
Quelqu'un saurait-il m'éclairer à ce sujet ?
Merci d'avance pour votre aide.
Partager