Bonjour,

J'aurai souhaité avoir vos éclairages sur une comparaison entre les deux codes 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
public class TestSingletonClass {
	private static String strTestA;
 
	private static String strTestB;
 
	private static TestSingletonClass monInstance = null;
 
	private TestSingletonClass() {
		strTestA = "mon TEST a";
		strTestB = "mon TEST b";
	}
 
	public static TestSingletonClass getInstance() {
		if(monInstance == null) {
			monInstance = new TestSingletonClass();
		}
 
		return monInstance;
	}
 
	public static void getStrings() {
		System.out.println("strTestA : " + strTestA);
		System.out.println("strTestB : " + strTestB);
	}
}
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
public class TestStaticClass {
	private static String strTestA;
 
	private static String strTestB;
 
	static {
		strTestA = "mon test A";
		strTestB = "mon test B";
	}
 
	public static void getStrings() {
		System.out.println("strTestA : " + strTestA);
		System.out.println("strTestB : " + strTestB);
	}
}
En usage intensif d'appel à la méthode "getStrings()", le premier cas est légèrement plus long que le second cas. (appels :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TestStaticClass.getStrings();
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
TestSingletonClass.getInstance().getStrings();
)

Mais en mémoire comment cela se passe ?
Le deuxième code conserve avec la portion "static" d'initialisation des variables crée t'elle bien une seule fois les contenu des variables "strTestA" et "strTestB" en mémoire ?

L'usage d'un singleton a t'il un quelconque intérêt dans le cas présent ?