import java.util.Objects;
public class Person {
private String name;
private int age;
// コンストラクタや他ã®ãƒ¡ã‚½ãƒƒãƒ‰ãªã©
@Override
public boolean equals(Object obj) {
// è‡ªåˆ†è‡ªèº«ã¨æ¯”較ã—ã¦ã„ã‚‹å ´åˆã¯trueã‚’è¿”ã™
if (this == obj) {
return true;
}
// 引数ãŒnullã§ãªã„ã“ã¨ã‚’確èª
if (obj == null) {
return false;
}
// クラスãŒç•°ãªã‚‹å ´åˆã¯falseã‚’è¿”ã™
if (getClass() != obj.getClass()) {
return false;
}
// 引数をPersonクラスã«ã‚ャスト
Person other = (Person) obj;
// Objectsクラスã®equalsメソッドを使用ã—ã¦ãƒ•ィールドãŒç‰ã—ã„ã‹ã©ã†ã‹ã‚’確èª
return Objects.equals(this.name, other.name) && this.age == other.age;
}
// ä»–ã®ãƒ¡ã‚½ãƒƒãƒ‰ãªã©
}
ã“ã®ä¾‹ã§ã¯ã€Objects.equals メソッドを使用ã—㦠name ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®æ¯”較を行ã£ã¦ã„ã¾ã™ã€‚Objects.equals メソッドã¯ã€null ã‚»ãƒ¼ãƒ•ãªæ¯”較を行ã„ã¾ã™ã€‚ã“ã®ã‚ˆã†ãªæ¯”較ãŒä¸€èˆ¬çš„ã«æŽ¨å¥¨ã•れã¦ã„ã¾ã™ã€‚
equalsメソッド
equals メソッドã¯ã€Javaã® Object クラスã§å®šç¾©ã•れã¦ã„るメソッドã§ã€ã‚ªãƒ–ジェクトåŒå£«ã®ç‰ä¾¡æ€§ã‚’比較ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•れã¾ã™ã€‚以下ã¯ã€equals メソッドã®åŸºæœ¬çš„ãªåŽŸå‰‡ã¨ä½¿ã„æ–¹ã«ã¤ã„ã¦ã®è§£èª¬ã§ã™ã€‚
equals メソッドã®åŸºæœ¬åŽŸå‰‡
- å射性(Reflexive): ä»»æ„ã®éžnullå‚ç…§ã®ã‚ªãƒ–ジェクト
xã«å¯¾ã—ã¦ã€x.equals(x)ã¯trueã‚’è¿”ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - 対称性(Symmetric): ä»»æ„ã®éžnullå‚ç…§ã®ã‚ªãƒ–ジェクト
xãŠã‚ˆã³yã«å¯¾ã—ã¦ã€x.equals(y)ãŒtrueã‚’è¿”ã™å ´åˆã€y.equals(x)ã‚‚trueã‚’è¿”ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - 推移性(Transitive): ä»»æ„ã®éžnullå‚ç…§ã®ã‚ªãƒ–ジェクト
xã€yã€zã«å¯¾ã—ã¦ã€x.equals(y)ãŒtrueã‹ã¤y.equals(z)ãŒtrueã®å ´åˆã€x.equals(z)ã‚‚trueã‚’è¿”ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - æ•´åˆæ€§ï¼ˆConsistent): ä»»æ„ã®éžnullå‚ç…§ã®ã‚ªãƒ–ジェクト
xã€yã«å¯¾ã—ã¦ã€x.equals(y)ã®è¤‡æ•°å›žã®å‘¼ã³å‡ºã—ã¯ã€ã‚ªãƒ–ジェクトã®å¤‰æ›´ãŒãªã„é™ã‚Šã€ã™ã¹ã¦ã®å‘¼ã³å‡ºã—ã§åŒã˜çµæžœã‚’è¿”ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。 - nullã¨ã®æ¯”較(Comparison to null): ä»»æ„ã®éžnullå‚ç…§ã®ã‚ªãƒ–ジェクト
xã«å¯¾ã—ã¦ã€x.equals(null)ã¯falseã‚’è¿”ã•ãªã‘れã°ãªã‚Šã¾ã›ã‚“。
equals メソッドã®å®Ÿè£…例
import java.util.Objects;
public class MyClass {
private int value;
// コンストラクタや他ã®ãƒ¡ã‚½ãƒƒãƒ‰ãªã©
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
MyClass myObject = (MyClass) obj;
return value == myObject.value;
}
@Override
public int hashCode() {
return Objects.hash(value);
}
}
ã“ã®ä¾‹ã§ã¯ã€equals メソッドã®å®Ÿè£…ã«ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªã‚¹ãƒ†ãƒƒãƒ—ãŒã‚りã¾ã™ï¼š
- 自分自身ã¨ã®æ¯”較:
this == objを使用ã—ã¦è‡ªåˆ†è‡ªèº«ã¨å¼•æ•°ãŒåŒã˜ã‚ªãƒ–ジェクトã§ã‚ã‚‹ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚åŒã˜ã‚ªãƒ–ジェクトã§ã‚れã°trueã‚’è¿”ã—ã¾ã™ã€‚ - null ãƒã‚§ãƒƒã‚¯ã¨ã‚¯ãƒ©ã‚¹ã®æ¯”較: 引数ãŒ
nullã§ãªã„ã“ã¨ã‚’確èªã—ã€ã‚¯ãƒ©ã‚¹ãŒåŒã˜ã§ã‚ã‚‹ã‹ã‚’ãƒã‚§ãƒƒã‚¯ã—ã¾ã™ã€‚ç•°ãªã‚‹ã‚¯ãƒ©ã‚¹ã§ã‚れã°falseã‚’è¿”ã—ã¾ã™ã€‚ - ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã®æ¯”較: クラスãŒåŒã˜ã§ã‚れã°ã€å„フィールドを比較ã—ã¦ç‰ä¾¡æ€§ã‚’判定ã—ã¾ã™ã€‚ã“ã®ä¾‹ã§ã¯
valueフィールドを比較ã—ã¦ã„ã¾ã™ã€‚ hashCodeメソッドã®å®Ÿè£…:equalsメソッドをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹å ´åˆã¯ã€å¯¾å¿œã™ã‚‹hashCodeメソッドもオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒæŽ¨å¥¨ã•れã¾ã™ã€‚Objects.hashメソッドを使用ã—ã¦ãƒãƒƒã‚·ãƒ¥ã‚³ãƒ¼ãƒ‰ã‚’生æˆã—ã¦ã„ã¾ã™ã€‚
「014 継承ã€å•題集リスト
🎯 実習ã§ç†è§£ã‚’æ·±ã‚よã†
ã“ã®å†…容ã«ã¤ã„ã¦JavaDrillã§å®Ÿéš›ã«æ‰‹ã‚’å‹•ã‹ã—ã¦å¦ç¿’ã§ãã¾ã™


コメント