Come ben sapete a volte Java utilizza i pool di oggetti per wrapper e tipi di stringhe, a volte no.Pool di oggetti per wrapper e stringhe Java
Ad esempio:
Integer i1 = 1;
Integer i2 = 1;
Integer i3 = new Integer(1);
String s1 = "String";
String s2 = "String";
String s3 = new String ("String");
System.out.println("(i1 == i2) " + (i1 == i2));
System.out.println("(i2 == i3) " + (i2 == i3));
System.out.println("(s1 == s2) " + (s1 == s2));
System.out.println("(s2 == s3) " + (s2 == s3));
Execution result:
(i1 == i2) true
(i2 == i3) false
(s1 == s2) true
(s2 == s3) false
Come si vede la boxe di primitive prende oggetti dal pool, creando di uno stringhe tramite stringa letterale prende oggetti dalla piscina, troppo. Tali oggetti sono in realtà lo stesso oggetto (l'operatore == restituisce true su di essi).
Altri meccanismi di creazione di wrapper e stringhe non prendono oggetti dal pool. Gli oggetti creati in questi modi sono in realtà oggetti diversi (operatore == restituisce false su di essi).
Ciò che mi confonde è il fatto che la piscina è parzialmente utilizzata.
Se si tratta di un problema di memoria, perché non utilizzare la piscina tutte le volte? Se non è un problema di memoria, perché usarlo del tutto?
La domanda è: quali sono le ragioni per l'implementazione di tale comportamento (= utilizzo parziale del pool)?
La domanda è piuttosto teorica, ma ha un'applicazione pratica: può aiutare a capire in che modo utilizzare correttamente gli oggetti personalizzati e naturalmente comprendere come funziona Java.
Quindi è il risultato di qualche scambio (quanto inaspettato !!!). È difficile selezionare la risposta migliore. Ci sono un paio di buoni candidati. Quindi, seleziono quello che fornisce la citazione "Specifica linguaggio Java". –