Esatto ... nel "constant pool" ce n'è 1 sola.Originariamente inviato da nourdine
quando si usano stringhe literal allora se, sono uguali (se contengono gli stessi caratteri), java le internalizza e le fa puntare alla stessa area in memoria.
Esatto. "new X" = nuovo oggetto X. Sempre. E se sono 2 oggetti distinti .... i loro reference ovviamente non possono essere uguali!Originariamente inviato da nourdine
mentre se facciamo una istanziazione classica non si internalizza una tega e le aree puntate in memoria sono diverse anche se le 2 strighe contengono gli stessic aratteri:
A parte per java.lang.Object che non ha "stato" e il suo hashCode() si basa internamente sull' "indirizzo" dell'oggetto, per altre classi che hanno una implementazione "appropriata" di hashCode(), il calcolo del hash code si dovrebbe basare solo sul "contenuto" dell'oggetto. E per un String il "contenuto" è la sequenza di caratteri. Stessa sequenza di caratteri = stesso hash code.Originariamente inviato da nourdine
solo che non capisco perche l'hashcode per tutte e 4 queste stringhe e' lo stesso. Mi aspetttavo fosse uguale per a e b ma diverso per c e d
E questo comunque è ben specificato e richiesto dal "contratto" tra equals() e hashCode(). Se due oggetti sono uguali secondo equals(), allora devono avere lo stesso hash code.