|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2010
Messaggi: 49
|
[java] Confronto oggetti di tipo creato da se
Salve ho un problema...sto svolgendo un compito ho finito ma mi manca un passaggio dove dovrei confrontare due oggetti di tipo StringPool(tipo ovviamente creato da me). Gli oggetti di tipo StringPool condengono due array di pari lunghezza uno di tipo intero e uno di tipo stringa. Poichè sto effettuando i test con Junit dovrei testare se il metodo di ordinameto che gli viene applicato funziona a dovere, cosi ho creato i due oggetti con gli stessi elementi all'interno, uno ordinato e uno no; quello non ordinato viene poi ordinato tramite il metodo, dopodichè dovrei confrontarli per dimostrare che i due oggetti sono uguali. Ho provato con ".equals" e con "==" ma non funziona. Premetto che non posso creare altri metodi.
![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
devi ridefinire il metodo equals.
|
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
E Object definisce l'equals tra due oggetti confrontando il valore del "hash code" dei due oggetti (prodotto dal metodo hashCode di Object) che tipicamente è un valore univoco e distinto per ogni singolo oggetto istanziato in memoria (di fatti si basa sull'indirizzo in memoria della data istanza). Quindi se tu crei due istanze di StringPool e le confronti con equals (ereditato da Object) oppure con l'operatore == (che funziona come l'equals definito in Object) non saranno mai uguali: Codice:
StringPool a = new StringPool(); StringPool b = new StringPool(); System.out.println("StringPool a = new StringPool();"); System.out.println("StringPool b = new StringPool();"); System.out.println("a.equals(b) is " + a.equals(b)); System.out.println("a == b is " + (a==b)); StringPool c = a; System.out.println("StringPool c = a;"); System.out.println("c.equals(a) is " + c.equals(a)); System.out.println("c == a is " + (c==a)); Poi ci sarebbe la questione relativa la fatto che se due oggetti sono "equals" tra loro allora devono anche avere lo stesso "hash code" (questo per motivi riguardanti le collezioni) il che significa che dovresti ridefinire anche hasCode(), ma se non devi mai creare collezioni di StringPool puoi anche farne a meno. Per maggiori info (e se vuoi leggere il contratto preciso) consulta i javadoc di questi due metodi, nella classe Object.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: May 2010
Messaggi: 49
|
Grazie
ok ora mi "documento" un po' sul metodo equals...grazie per la vostra disponibilità.
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: May 2010
Messaggi: 49
|
RISOLTO
Ragazzi ho risolto in modo semplicissimo!! solo ora però ho notato di non aver postato la soluzione: .toString() per trasformare gli oggetti StringPool in stringa e poi .equals() per confrontarli!!
|
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Feb 2010
Messaggi: 31
|
ma hai ridefinito il toString() ? altrimenti potrebbe non funzionare correttamente, quando definisci un nuovo oggetto , dovresti ridefinire i metodi "base" che ti servono.
ad esempio se fai la classe persona Codice:
public class persona{ String nome; int età; } ad esempio puoi decidere che due persone x e y sono uguali se hanno lo stesso nome, cosi: Codice:
public class persona{ String nome; int eta; public persona(int b,String a){ this.nome=a; this.eta=b; } public boolean equals(Object o){ //controlli se Object o è un istanza di persona if(!(o instanceOf persona))return false; persona nuova=(persona)o; //poi controlli se i due nomi sono uguali return this.nome.equals(nuova.nome); } }//fine persona
__________________
-.-'' Ultima modifica di Giovanni Tavella : 02-08-2010 alle 17:40. |
![]() |
![]() |
![]() |
#7 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
ok
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: Aug 2010
Messaggi: 138
|
si basta che ridefinisci il metodo equals, per l'oggetto da te creato
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:00.