View Full Version : [JAVA] mistero su "contains"
AbuJaffa
02-06-2006, 16:21
Ho un problema con il metodo contains di ArrayList. Allora ho il seguente codice:
ArrayList<URL> url=new ArrayList<URL>();
url.add(0,new URL("http://ciao.ciao"));
ArrayList<URL> url2=new ArrayList<URL>();
url2.add(0,new URL("http://ciao.ciao"));
Se eseguo una condizione del genere:
if ( url.contains(new URL("http://ciao.ciao")) ){
System.out.println("ok");
}
visualizza ok.
Mentre se eseguo una condizione del genere:
if ( url.contains(url2.get(0) ){
System.out.println("ok");
}
la condizione non si verifica. Perchè??
perchè????
AbuJaffa
02-06-2006, 17:36
up?
shinji_85
02-06-2006, 18:16
La butto lì...
Java lavora con gli oggetti...
I due oggetti da te creati hanno lo stesso contenuto (stato, valore degli attributi, "http://ciao.ciao"), ma riferimenti diversi...
Adesso...
Magari ho scritto una stronzata perché conosco Java da meno di 1 settimana...
Ma avevo un problema simile con i Vector...
Non so nemmeno se c'è un modo semplice per fare quello che vuoi fare... :boh:
AbuJaffa
02-06-2006, 18:20
ok, il fatto che hanno riferimenti diversi è più che palese. Ma allora guarda il codice seguente:
ArrayList<String> url=new ArrayList<String>();
url.add(0,"ciao");
ArrayList<String> url2=new ArrayList<String>();
url2.add(0,"ciao");
if ( url.contains(url2) ){
System.out.println("ok");
}
perchè utilizzando String funziona?
shinji_85
02-06-2006, 18:27
Io non ho molta conoscenza di Java...
Mi ricordo che in C++ alcune classi (e string era una di queste, mi pare) ridefinivano alcuni metodi...
Ad esempio... Scrivendo ( stringa1 == stringa2 ) si effettuava il controllo sul valore e non sull'indirizzo (o riferimento)...
Idem per costruttori di copia e cose simili... Scrivendo stringa1 = stringa2; si copiava solo il contenuto dell'oggetto stringa...
In pratica per comodità veniva fatto un "overriding" anche degli operatori...
In Java probabilmente ci sarà un meccanismo simile... Ma non ne so molto... :)
beppegrillo
02-06-2006, 20:01
manca un cast?
Mezzetti0903
02-06-2006, 20:29
Perchè probabilmente non lo hai eseguito
<code>
try{
ArrayList<URL> url=new ArrayList<URL>();
url.add(0,new URL("http://ciao.ciao"));
ArrayList<URL> url2=new ArrayList<URL>();
url2.add(0,new URL("http://ciao.ciao"));
if ( url.contains(new URL("http://ciao.ciao")) ){
System.out.println("ok");
}
if ( url.contains(url2.get(0) )){
System.out.println("ok");
}
}
catch(Exception err){
}
</code>
questo codice stampa due ok sulla 1.5
tu su cosa compili?? ma comunque non credo sia quello....
AbuJaffa
02-06-2006, 20:55
mi spieghi questo:
ArrayList<URL> url=new ArrayList<URL>();
url.add(0,new URL("http://ciao.ciao"));
ArrayList<URL> url2=new ArrayList<URL>();
url2=url;
if ( url.contains(new URL("http://ciao.ciao")) ){
System.out.println("ok1");
}
if ( url.contains(url2) ){
System.out.println("ok2");
}
perchè stampa solo ok1.
Mezzetti0903
02-06-2006, 21:26
mi spieghi questo:
ArrayList<URL> url=new ArrayList<URL>();
url.add(0,new URL("http://ciao.ciao"));
ArrayList<URL> url2=new ArrayList<URL>();
url2=url;
if ( url.contains(new URL("http://ciao.ciao")) ){
System.out.println("ok1");
}
if ( url.contains(url2) ){
System.out.println("ok2");
}
perchè stampa solo ok1.
c'è un errore....forse non volevi scrivere
contains(url2)
ma
contains(url2.get(0));
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.