Izpitno vprašanje RAČ2PRA 1600
Iz MaFiRaWiki
![]() | Avtor tega članka je študent/ka JozePremru.
Pripravil/a ga je pri predmetu Računalništvo 2 (FMF PRA). Kljub temu ste vsi vabljeni k urejanju in popravkom, saj je bistvo wikija ravno v sodelovalnem delu. |
Vprašanje
Primerjanje objektov.
Odgovor
Ko primerjamo objekte, moramo paziti na to, da ne primerjamo naslova dveh objektov, ampak da primerjamo njuno vsebino (komponente). Vsak razred pozna metodo equals, ki je naslednje oblike:
public boolean equals(Object b).
Ta metoda sprejme kot argument objekt, ga primerja z drugim objektom in vrne vrednost true če imata objekta isti naslov.
Primer:
public class Student{ public int student_stevilka; //konstruktor public Student(int student_stevilka){ this.student_stevilka = student_stevilka; } //ustvarimo dva objekta razreda Student, ki imata enako komponento student_stevilka Student prvi = new Student(27004545); Student drugi = new Student(27004545); //novonastala objekta med seboj primerjamo } }
Zgornja koda nam bo izpisala, da objekta nista enaka. To pa za to, ker nismo primerjali objekta, ampak smo primerjali naslova objektov. Pravilna koda, za primerjanje objektov iz našega razreda bi bila sledeča:
public class Student{ public int student_stevilka; //konstruktor public Student(int student_stevilka){ this.student_stevilka = student_stevilka; } //napisimo metodo compareTo(), ki bo primerjala objekta tipa Student if(b == this) return true; else if (b == null) return false;//ce je b prazen objekt oz. ne obstaja, nista enaka else if(!(getClass() == b.getClass())){//preverimo tip vhodnega objekta in danega objekta return false; } else{ Student s = (Student)b; if(s.student_stevilka == this.student_stevilka)return true;//primerjamo komponente objektov else return false; } //ustvarimo dva objekta razreda Student Student prvi = new Student(27004545); Student drugi = new Student(27004545); //primerjamo prvi in drugi } } }
Sedaj bi dobili pravilen izpis in sicer da sta objekta enaka.