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 :
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++; 
    }
}
A votre avis ? Que va afficher la console ?
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 !

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++; 
    }
}
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
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]++; 
    }
}
Qu'obtient-on ? Je vous le donne en mille : "a vaut 4"

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.