Deo zbornika Učimo Javu

Ispitivanje jednakosti objekata

Operatori <, >, <= i >= mogu se primijeniti jedino na brojeve i znakove. Ne mogu se koristiti sa drugim tipovima.

Poređenje po referenci

Ako pokušate da poredite dva identična teksta pomoću jednakosti ==, rezultat neće biti ono što očekujete:

class JaCitam {

  public static void main(String args[]) {

    String s1 = new String("Ja čitam.");
    String s2 = new String("Ja čitam.");

    if (s1 == s2) {
      System.out.println("Strune su jednake.");
    }
    else if (s1 != s2) {
      System.out.println("Strune nisu jednake.");
    }
  }
}

Vidjet ćete da je rezultat:

Strune nisu jednake.

Poređenje po vrijednosti

Da bismo uspoređivali strune ili objekte bilo koje druge vrste, koristimo se metodom equals iz paketa java.lang.String. Pogledajmo ispravnu verziju programa koja će raditi onako kako očekujemo:

class JaCitam {

  public static void main(String args[]) {

    String s1 = new String("Ja čitam.");
    String s2 = new String("Ja čitam.");

    if (s1.equals(s2)) {
      System.out.println("Strune su jednake.");
    }
    else {
      System.out.println("Strune nisu jednake.");
    }
  }
}

U konzoli:

% javac JaCitam.java
% java JaCitam
Strune su jednake.

Razlozi za ovo sežu prilično duboko u filozofiju Jave i prirodu objekata, ali ukratko, u pitanju su dve različite fizičke kopije, koje imaju isti sadržaj. Prvi način ispituje jel isti primerak objekta u pitanju, a drugi jel isti sadržaj.

Izvor: Elliotte Rusty Harold, Java Lecture Notes, preveo Draško Budin, priredio Damjan Pavlica.