Java Academy · Oppitunti

this sekä toString/equals/hashCode

Käyttäkää this-viitettä nykyiseen olioon, kirjoittakaa hyödyllinen toString ja toteuttakaa equals sekä hashCode oikein.

Oppitunti 1/38 vaihetta

this sekä toString/equals/hashCode on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/3. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 3 oppituntia.

this-avainsana

this viittaa nykyiseen olioon. Sitä käytetään kenttien käyttämiseen tai toisen konstruktorin kutsumiseen. Se on hyödyllinen silloin, kun parametrien nimet ovat samoja kuin kenttien nimet, sillä se tekee tarkoituksesta selkeän.

Luettava toString

toString() palauttaa oliosta ihmiselle helposti ymmärrettävän yhteenvedon. Se kannattaa ylikirjoittaa niin, että tulosteessa näkyvät tärkeät kentät, kuten id ja name. Näin lokit ja virheenkorjaustulosteet ovat paljon helpommin ymmärrettäviä.

equals vai ==

equals tarkistaa loogisen samanarvoisuuden, kun taas == tarkistaa, viittaavatko kaksi viitettä samaan olioon. Useimpien toimialaluokkien kannattaa ylikirjoittaa equals niin, että vertailu tehdään sisällön eikä muistiosoitteen perusteella.

hashCode vastaa equals-metodia

hashCode-metodin on oltava yhdenmukainen equals-metodin kanssa: jos a.equals(b) on tosi, myös a.hashCode() -arvojen on oltava samat. Tätä sääntöä tarvitaan, jotta HashSet ja HashMap toimivat oikein.

Vinkit ja sudenkuopat

Valitkaa vertailuun vakaat kentät, kuten id tai email, ja pitäkää toString lyhyenä. Vältäkää muuttuvien kokoelmien käyttämistä equals- ja hashCode-metodeissa. Jos olette epävarmoja, luokaa metodit IDE:llä ja tarkistakaa ne.

Koodi: this, equals, hashCode

Esimerkissä luodaan kaksi henkilöä, joilla on sama sisältö. equals palauttaa arvon true, hash-koodit täsmäävät ja HashSet löytää toisen olion.

public class Main {
  // Simple Person class to demo this, toString, equals, hashCode
  static class Person {
    private int id;
    private String name;

    // Constructor uses this to set fields
    Person(int id, String name) {
      this.id = id;       // this.id refers to the field
      this.name = name;   // name comes from the parameter
    }

    // Human friendly string
    @Override
    public String toString() {
      return "Person{id=" + id + ", name=" + name + "}";
    }

    // Logical equality: same id and same name
    @Override
    public boolean equals(Object o) {
      if (this == o) return true;                 // same reference
      if (o == null || getClass() != o.getClass()) return false;
      Person other = (Person) o;
      if (this.id != other.id) return false;
      // Compare names safely (null aware)
      if (this.name == null) return other.name == null;
      return this.name.equals(other.name);
    }

    // Hash code consistent with equals
    @Override
    public int hashCode() {
      int result = Integer.hashCode(id);
      result = 31 * result + (name == null ? 0 : name.hashCode());
      return result;
    }
  }

  public static void main(String[] args) {
    // Create two persons with the same content
    Person a = new Person(1, "Ada");
    Person b = new Person(1, "Ada");

    // toString shows readable info
    System.out.println(a);

    // equals compares content, not memory address
    System.out.println("a == b ? " + (a == b));           // false (different objects)
    System.out.println("a.equals(b) ? " + a.equals(b));   // true (same content)

    // hashCode must match for equal objects (useful in hash collections)
    System.out.println("hash(a) = " + a.hashCode());
    System.out.println("hash(b) = " + b.hashCode());

    // Example with HashSet: contains works because equals and hashCode agree
    java.util.Set<Person> set = new java.util.HashSet<>();
    set.add(a);
    System.out.println("set contains b ? " + set.contains(b)); // true
  }
}

Sopimuksen tarkistus

Pikatarkistus: jos ylikirjoitatte equals-metodin, mitä muuta pitäisi tehdä ja miksi?

Kertaus

Kertaus: this selkeyttää kenttien käyttöä, toString helpottaa virheenkorjausta, equals vertaa sisältöä ja hashCode pitää kokoelmat yhdenmukaisina.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”this sekä toString/equals/hashCode” ilmainen?

Kyllä – oppitunnin ”this sekä toString/equals/hashCode” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 3 oppituntia.

Mitä opin oppitunnilla ”this sekä toString/equals/hashCode”?

Käyttäkää this-viitettä nykyiseen olioon, kirjoittakaa hyödyllinen toString ja toteuttakaa equals sekä hashCode oikein. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/3.

Kuinka kauan ”this sekä toString/equals/hashCode”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. this sekä toString/equals/hashCode
  2. Olioiden koostaminen
  3. Toimialueen mallintaminen (UML→koodi)
← Takaisin: Java Academy