compareTo,=,equalsについての質問

1471 ワード

1、何がcompareTo、=,equalsですか.
この3つはいずれも大きさを比較するために用いられるが,具体的な比較形式と結果は異なる.
compateTo:主に辞書符号化に基づいてビットを比較し、例えばAとaのサイズ比較を行い、結果は符号化値の差である.
==:基本データ型(byte,short,int,long,float,double,boolean,char)の場合、比較値です.
//"==" 
int a = 10;
int b = 10;
System.out.println("a==b"+(a==b));//true

Stringなどの参照タイプの変数の場合、この時点で指すオブジェクトのアドレスを比較します.
String a = "a";
String b = "a";
System.out.println("a==b"+(a==b));//true  , 
String a = new String("a");
String b = new String("a");
System.out.println("a==b"+(a==b));//false    , 

equals:equalsメソッドを書き換えていない場合、参照タイプの変数が指すオブジェクトのアドレスを比較します.
String,Dateなどのクラスがequalsメソッドを書き換えると,指向するオブジェクトの内容を比較する.
//equals 
System.out.println("a.equals(b)"+a.equals(b));//true

2、拡張:equalsの書き換えについて
equalsの下位実装ロジックには,オブジェクトが一致するか否かを判断する関数instanceofがある.
equals書き換える場合はhashcodeメソッドも書き換えます.
a.javaアプリケーションの実行時に、同じオブジェクトを複数回呼び出したときのhsahCode()メソッドにかかわらず、このオブジェクトのhashCode()メソッドの戻り値は同じint値でなければならない
b.2つのオブジェクトequals()の戻り値がtrueの場合、hashCode()も同じint値を返さなければなりません.
c.2つのオブジェクトequals()の戻り値がfalseの場合、hashCode()の戻り値も異なる必要があります.
クラスを定義するとき、2つの異なるオブジェクトのいくつかの属性値が同じであることを常に望んでいるので、equals()メソッドを書き換え、原則に従ってequals()メソッドを書き換え、hashCode()メソッドを書き換え、上記のb,c原則を保証します.だからjavaの多くのクラスはこの2つの方法を書き直しました.例えば、Stringクラス、包装クラス(他の人の話を参考にして)
まとめ:equalsを使用する場合は空のポインタに注意してください.