Consideriamo due riferimenti di tipo Integer che chiamare il metodo statico valueOf fabbrica come illustrato di seguito: -è ok per confrontare oggetti immutabili in Java utilizzando == invece di uguale
Integer a = Integer.valueOf("10");
Integer b = Integer.valueOf("10");
Considerando che Integer è immutabile, è va bene confrontare aeb usando == invece di usare il metodo equals. Sto indovinando che il metodo valueOf si assicura che solo una istanza di Integer con il valore 10 venga creata e un riferimento a questa istanza venga restituito per ogni numero intero creato con un valore 10.
In generale, va bene confrontare due riferimenti di una classe immutabile che vengono creati utilizzando una chiamata allo stesso metodo di factory statica utilizzando == invece di equals?
Modifica: La classe Integer è stata utilizzata solo come esempio. Sono consapevole che tars Intters fino a 127 restituirà true se vengono confrontati usando ==. Quello che ho bisogno di sapere è che quando creo la mia classe immutabile, ad esempio MyImmutable con un metodo create() che assicurerà che non vengano creati duplicati oggetti MyImmutable, sarà ok se confronto 2 riferimenti MyImmutable creati usando il metodo create da usando == invece di eguali.
Si prega di leggere [questo] (http: //www.javabeat.net/qna/13-what-is-difference-between-equals-and- /) –
L'immutabilità implica semplicemente che non possono cambiare. È necessario prestare particolare attenzione con il caching (non 'new') per garantire che vengano restituiti gli stessi valori per gli stessi parametri di input. –
È possibile utilizzare '==' invece di uguali per i tipi in cui gli uguali non sono stati sovrascritti. Dato che questo potrebbe cambiare in futuro, l'uguaglianza è quasi sempre migliore. L'unica volta che direi '==' è migliore è con tipi come 'enum' che potrebbero essere' null' e usare '==' semplifica il codice in questo caso. –