java.ほうそう


1. equals()


アドレス値の比較=ロールは、オブジェクトの参照変数を受信し、パラメータとして比較し、結果をブール値として通知します.値が自身と同じ場合はtrue、値が異なる場合はfalse
equalsは、2つの参照変数に格納されている値(アドレス値)が同じかどうかのみ判断できますが、以下の上書きを行うと、実際の値を比較することもできます.

public class Person {
    long id;

    @Override
    public boolean equals(Object o) {
        if (o != null && o instanceof Person)
            return id == ((Person) o).id;
        else
            return false;
    }

    Person(long id) {
        this.id = id;
    }
}

public class EqualsEx2 {
    public static void main(String[] args) {
        Person p1 = new Person(801108111222L);
        Person p2 = new Person(801108111222L);

        if(p1 == p2) {
            System.out.println("p1 과 p2 는 같은 사람");
        } else {
            System.out.println("p1과 p2 는 다른 사람");
        }

        // 주소값 비교
        if (p1.equals(p2)) {
            System.out.println("p1과 p2 같은 사람");
        } else {
            System.out.println("p1과 p2 다른 사람");
        }
    }
}


2. Hashcode()


オブジェクト自体のハッシュコードを返します.
オブジェクトのアドレス値を使用してハッシュコードを生成して返すため、異なる2つのオブジェクトに異なるハッシュコード値を持つことはできません.

public class HashCodeEx1 {
    public static void main(String[] args) {
        String str1 = new String("abc");
        String str2 = new String("abc");

        System.out.println(str1.equals(str2));
        System.out.println(str1.hashCode());
        System.out.println(str2.hashCode());
        System.out.println(System.identityHashCode(str1));
        System.out.println(System.identityHashCode(str2));
    }
}

3. toString()


インスタンス情報を文字列として提供する目的を定義します.

public String toString() {

	return getClass().getName() + "@" + Integer.toJexString(hashCode());
}
public class CardToString {
    public static void main(String[] args) {
        Card c1 = new Card();
        Card c2 = new Card();

        System.out.println(c1.toString());
        System.out.println(c2.toString());
    }
}

火を通してご使用いただけます
public class Card {
    String kind;
    int number;

    Card() {
        this("SPACE", 1);
    }

    Card(String kind, int num) {
        this.kind = kind;
        this.number = num;
    }

    public String toString() {
        return "kind : " + kind + ", number : " + number;
    }
}



4. clone()


自分をコピーして新しいインスタンスを作成します.オブジェクトクラスで定義されたclone()はインスタンス変数の値のみをコピーするため、参照タイプのインスタンス変数を持つクラスはインスタンスコピーを完全に行うことはできません.
単純な例)

public class Point implements Cloneable {
    int x,y ;
    Point (int x, int y) {
        this.x = x;
        this.y = y;
    }

    public String toString(){
        return "x= " + x + ", y =" + y;
    }

    public Object clone() {
        Object obj = null;
        try {
            obj = super.clone();
        } catch (CloneNotSupportedException e ) {}
        return obj;
    }
}

clone()を使用するには、まずコピーするクラスをcloneableインタフェースに実装し、clone()を上書きしながらアクセス制御プログラムを保護されたものから共通に変更する必要があります.
public class CloneEx1 {
    public static void main(String[] args) {
        Point ori = new Point(3,5);
        Point copy = (Point) ori.clone();
        System.out.println(ori);
        System.out.println(copy);
    }
}

共通変換タイプ


:上書きする祖先メソッドの戻りタイプをサブクラスのタイプに変更できます.
例)

public Point clone() {
	Object obj = null;
    try {
    	obj = super.clone();
    } catch ( CloneNotSupportedException e ) { }
    return (Point) obj;
}
例)
public class CloneEx2 {
    public static void main(String[] args) {
        int [] arr = {1,2,3,4,5};
        int [] arrClone = arr.clone();
        arrClone[0] = 6;

        System.out.println(Arrays.toString(arr));
        System.out.println(Arrays.toString(arrClone));

    }
}

クローンは、単純コピーオブジェクトに格納されている値の얕은 복사です.
オリジナルにコピーされて参照されるオブジェクトを깊은 복사と呼びます.

5. getClass()


自分が属するクラスのクラスオブジェクトを返す方法.
クラスオブジェクトには、クラスのすべての情報が含まれています.各クラスは1つしかありません.クラスファイルがクラスローダからメモリにロードされると自動的に生成されます.まず、既存の作成されたクラスオブジェクトがメモリに存在するかどうかを確認している場合は、オブジェクトの参照を返します.存在しない場合は、クラスパスで指定されたパスに基づいてクラスファイルを検索します.見つからない場合はClassNotFoundExceptionが起動します
例)
public class ClassEx1 {
    public static void main(String[] args) throws Exception{
        Card c = new Card("HEART", 3);
        Card c2 = Card.class.newInstance(); 

        Class cObj = c.getClass();System.out.println(c);
        System.out.println(c2);
        System.out.println(cObj.getName());
        System.out.println(cObj.toGenericString());
        System.out.println(cObj.toString());

    }
}

  • c.getClass():生成されたオブジェクトから
  • を取得
  • Card.class:クラス文字(*.class)から
  • を取得する方法
  • Class.forName(「Card」):クラス名から
  • を取得する方法

    リファレンス


    賈巴の」