Equalsと==の比較は何ですか?
1。BooleanTem = a == b;
まず第一に、==比較は間違いなくアドレスです。スタックの観点から、つまり、==比較はスタック上のコンテンツです。 Stackは、Javaの8つの基本タイプに自動変数のリテラル値を保存するために使用されるためです(自動変数は、int a = 1;の形式で定義されている変数です。)。自動変数の比較値の場合、equals()はメソッドであるため、==と比較するために間違いなく使用されます。自動変数は、クラスのインスタンスでもクラスの参照でもないため、Equals()メソッドは使用できません。
2.Boolean Tem = A.Equals( "B");
equals()メソッドは通常、オブジェクトのコンテンツを比較するために使用されますが、場合によっては2つのオブジェクトのアドレスも比較します。
次
テストプログラムを作成します
パッケージcom; import java.util.date; public class test {public static void main(string [] args){integer integer1 = new Integer(1); integer integer2 = new Integer(1); string str1 = new String( "123"); string str2 = new String( "123");日付date1 = new date();日付date2 = new date(); double double1 = new double( "1.0"); double double2 = new double( "1.0"); Boolean Tem1 = New Boolean(True); boolean tem2 = new boolean(true); object object1 = new object(); object object2 = new object(); System.out.println( "----オブジェクト------"); system.out.println(object1.equals(object2)); system.out.println(object1 == object2); system.out.println(object1.equals(object1)); System.out.println(object1 == object1); System.out.println( "----------"); System.out.println(tem1.equals(tem2)); System.out.println(tem1 == tem2); system.out.println( "--- double -------"); System.out.println(double1.equals(double2)); System.out.println(double1 == double2); System.out.println( "-------------"); system.out.println(integer1.equals(integer2)); System.out.println(integer1 == integer2); System.out.println( "-----------"); System.out.println(str1.equals(str2)); System.out.println(str1 == str2); System.out.println( "----------"); System.out.println( "-----------"); System.out.println(str1 == str2); System.out.println( "----------"); System.out.println(date1.equals(date2)); System.out.println(date1 == date2); }}結果:
- -物体 - - -
間違い
間違い
真実
真実
--- boolean -----
真実
間違い
- -ダブル - - -
真実
間違い
- -整数 - - -
真実
間違い
- -弦 - - -
真実
間違い
- -日付 - - -
真実
間違い
第一に、比較された2つのオブジェクトが同じ場合、== equals()の結果は真であり、2つのオブジェクトが異なる場合、それらはfalseに戻ります。したがって、==および等しいものがオブジェクトを比較するために使用されると、オブジェクトのアドレスを比較しますが、実際には本質は同じです。これは、オブジェクトクラスのequals()メソッドのコードです。
public boolean equals(object obj){return(this == obj); }ブール、ダブル(フロート)、インターガー(ショット、ロング)、文字列、日付については、ソースコードも見つけました。以下に、boolean、double、interger、string、および日付にequals()メソッドのソースコードを投稿しました。この時点で、これらのクラスはオブジェクトクラスから継承されているため、equals()メソッドが書き直されました。
Boolean:
public boolean equals(object obj){if(obj instanceof boolean){return value ==((boolean)obj).booleanvalue(); } falseを返します。 }ダブル:
public boolean equals(object obj){return(obj instanceof double)&&(doubletolongbits(((double)obj).value)== doubletolongbits(value)); }インターガー:
public boolean equals(object obj){if(obj instanceof integer){return value ==((integer)obj).intvalue(); } falseを返します。 }弦:
public boolean equals(object anobject){if(this == anobject){return true; } if(anobject instanceof string){string anothestring =(string)anobject; int n = value.length; if(n == anotherstring.value.length){char v1 [] = value; char v2 [] = anothestring.value; int i = 0; while(n - != 0){if(v1 [i]!= v2 [i])false; i ++; } trueを返します。 }} falseを返します。 }日付:
public boolean equals(object obj){dateのobj instance && gettime()==((date)obj).gettime(); }言い換えれば、これらの時代には、オブジェクトクラスのequalsメソッドが書き換えられ、2つのオブジェクトの実際のコンテンツとアドレスがなくなりました。もちろん、それは間違いなくこれらだけではありません。 Javaネイティブクラスがオブジェクトクラスのequals()メソッドを書き換える一般的なケースがいくつかあります。
読んでくれてありがとう、私はそれがあなたを助けることができることを願っています。このサイトへのご支援ありがとうございます!