PDA

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));