[ igyy @ 26.01.2005. 16:43 ] @
Pozdrav,

zanima me na koji nacin mogu saznati jesu li 2 objekta ista?

npr.



code:
--------------------------------------------------------------------------------


class Kocka {

int duljinaStranice;

public Kocka(){

duljinaStranice=5;
}
}


--------------------------------------------------------------------------------




I sad napravim 2 objekta iz navedene klase

Kocka MalaKocka=new Kocka();
Kocka VelikaKocka=new Kocka()


Kako mogu ispitati jesul te dvije kocke (dva objekta) identicni?

ako koristim metodu equals() ona ce mi vratiti vrijednost koja mi govori samo jesu li "pokazivaci" identicni tj. da li malaKocka i velikaKocka pokazuju na isti dio memorije a ja zelim saznati jesu li njihove duljine stranica jednake??

pretpostavljam da mogu pisati nesto poput ovoga

MalaKocka.duljinaStranice.equals(VelikaKocka.duljinaStranice)

ali sta ako npr. objekt ima 10-ak i vise varijabli instanci ;bojaKocke,materijalKocke itd. ?

Unaprijed hvala na odgovoru
[ Milan Andjelkovic @ 26.01.2005. 19:29 ] @
Čini mi se da si malo nezgrapno definisao postavku stvari, ali dobro...
Uglavnom, porediš sve varijable zasebno, po principu koji si naveo. Možeš i da ubaciš varijable u niz(ove), pa da ih porediš kroz for petlju.
Možda ima i neko pametnije rešenje, ja ne znam?
[ Dragi Tata @ 26.01.2005. 19:41 ] @
Za to što pitaš se koristi upravo metod equals, ali moraš sam da ga preklopiš za svoje klase inače se poziva Object.equals() koji poredi reference.

http://java.sun.com/j2se/1.3/docs/api/java/lang/Object.html

Inače, dilema se obično naziva "identičnost vs jednakost objekta". Operator == se koristi za ispitivanje identičnosti, a metod equals za ispitivanje (logičke) jednakosti.
[ Milan Andjelkovic @ 26.01.2005. 19:49 ] @
Citat:
Dragi Tata: ali moraš sam da ga preklopiš za svoje klase

Da li bi mi pojasnio ovo? Koliko sam skapirao, iggy želi da uporedi sve varijable koje postoje u okviru dve instance iste klase. Nisam razumeo da li bi Object1.equals(Object2) moglo da se iskoristi za to ili si nešto drugo hteo da kažeš?
[ Dragi Tata @ 26.01.2005. 19:51 ] @
Citat:
Milan Andjelkovic: Nisam razumeo da li bi Object1.equals(Object2) moglo da se iskoristi za to ili si nešto drugo hteo da kažeš?


Ne. Hteo sam da kažem da mora sam da napise metodu equals za svoju klasu ako zeli da poredi objekte po vrednosti.
[ filmil @ 26.01.2005. 22:32 ] @
Ako preklopi metod equals() za klasu Kocka i u njemu napiše kod koji proverava.

Na primer:

Code:
public class Kocka {
     private int dužina;
     private int boja;
 
     int getDužina() { return dužina; }
     int getBoja() { return boja; }
 
     public Kocka(int početnaDužina, int početnaBoja) {
        this.dužina = početnaDužina;
        this.boja = početnaBoja;
     }
 
     public boolean equals(Object drugaKocka) {
        if (drugaKocka instanceof Kocka) {
              Kocka k = (Kocka) drugaKocka;
              return (k.getDužina() == this.dužina) && (k.getBoja() == this.boja);
        }
        return false;
     }
 }


Kao što se vidi, ovde smo se dogovorili da su dve kocke jednake ako su im dužine iste i boje iste. Taj dogovor je prepisan u metod equals(). Pošto je equals nasleđen iz java.lang.Object, tip promenljive koji mu se prosleđuje je Object, što tehnički znači da bilo koji objekat može da se prosledi na poređenje. Zbog toga moramo da proverimo da li su instance odgovarajuće, zatim izvučemo Kocku iz Objekta i uporedimo po dogovoru. Malo tehnikalija, al takav je život.

f


// edit: && je ispalo zbog es-innda

[Ovu poruku je menjao filmil dana 27.01.2005. u 10:05 GMT+1]
[ igac @ 26.01.2005. 22:58 ] @
filmile &&/and kod returna?
[ igyy @ 27.01.2005. 00:12 ] @
puno hvala na odgovorima...jos uvijek se mucim s nekim osnovnim pojmovima ali polako mi sve sjeda na svoje mjesto
[ filmil @ 27.01.2005. 09:03 ] @
Citat:
 filmile /and kod returna?
fsck. Bag u es-inndu skida endove. Ispraviću.

f