Izpitno vprašanje RAČ2PRA 1600

Iz MaFiRaWiki

GFDL 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:

  1. public class Student{
  2. public int student_stevilka;
  3.  
  4. //konstruktor
  5. public Student(int student_stevilka){
  6. this.student_stevilka = student_stevilka;
  7. }
  8. public static void main(String[] args){
  9. //ustvarimo dva objekta razreda Student, ki imata enako komponento student_stevilka
  10. Student prvi = new Student(27004545);
  11. Student drugi = new Student(27004545);
  12.  
  13. //novonastala objekta med seboj primerjamo
  14. if(s1.equals(s2))System.out.println("Objekta sta enaka!");
  15. else System.out.println("Objekta nista enaka!");
  16. }
  17. }

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:

  1. public class Student{
  2. public int student_stevilka;
  3.  
  4. //konstruktor
  5. public Student(int student_stevilka){
  6. this.student_stevilka = student_stevilka;
  7. }
  8.  
  9. //napisimo metodo compareTo(), ki bo primerjala objekta tipa Student
  10. public boolean compareTo(Object b){
  11. if(b == this) return true;
  12.  
  13. else if (b == null) return false;//ce je b prazen objekt oz. ne obstaja, nista enaka
  14. else if(!(getClass() == b.getClass())){//preverimo tip vhodnega objekta in danega objekta
  15. return false;
  16. }
  17. else{
  18. Student s = (Student)b;
  19. if(s.student_stevilka == this.student_stevilka)return true;//primerjamo komponente objektov
  20. else return false;
  21. }
  22. public static void main(String[] args){
  23. //ustvarimo dva objekta razreda Student
  24. Student prvi = new Student(27004545);
  25. Student drugi = new Student(27004545);
  26.  
  27. //primerjamo prvi in drugi
  28. if(s1.compareTo(s2))System.out.println("Objekta sta enaka!");
  29. else System.out.println("Objekta nista enaka!");
  30. }
  31. }
  32. }

Sedaj bi dobili pravilen izpis in sicer da sta objekta enaka.


Glej tudi

Osebna orodja