国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

ホームページ Java &#&はじめる equals()関數(shù)と「==」の機能は何ですか?

equals()関數(shù)と「==」の機能は何ですか?

Jul 10, 2020 pm 04:59 PM
== equals()

equals()関數(shù)と「==」の機能は何ですか?

まず第一に、それらの違いを見てみましょう:

(推奨學習: java エントリー プログラム)

  • equals() メソッドは、2 つのオブジェクトの內容が等しいかどうかを比較するために使用されます。すべてのクラスは java.lang.Object クラスを継承するため、このメソッドがオーバーライドされない限り、すべてのオブジェクトに適用できます。 . 、まだ呼び出されるメソッドは Object クラスのメソッドですが、Object の equals メソッドは ==;

  • "== の判定を返します。変數(shù) (スタック) メモリを比較します。に格納されているオブジェクトの (ヒープ) メモリ アドレスは、2 つのオブジェクトのアドレスが同じかどうか、つまり、それらが同じオブジェクトを參照しているかどうかを判斷するために使用されます。

equals() 関數(shù)

equals() 関數(shù)は、2 つのオブジェクトが等しいかどうかを判斷するために使用されます。

equals()はJDKのObject.javaで定義されています。 2 つのオブジェクトが等しいかどうかは、アドレスが等しいかどうか (つまり、同じオブジェクトであるかどうか) で判斷します。ソース コードは次のとおりです。

public boolean equals(Object obj) {
    return (this == obj);
}

equals() メソッドは Object.java で定義されているため、これは、すべての Java クラスが equals() メソッドを実裝し、すべてのクラスが equals( を介して 2 つのオブジェクトを比較できることを意味します。 ). オブジェクトが等しいかどうか。

ただし、デフォルトの「equals()」メソッドの使用は「==」メソッドと同等であるとすでに述べました。したがって、通常は、equals() メソッドをオーバーライドします。2 つのオブジェクトの內容が等しい場合、equals() メソッドは true を返し、そうでない場合は、fasle を返します。

以下は、「クラスがequals()メソッドをカバーするかどうか」に基づいて2つのカテゴリに分類されます。

  • クラスが equals() メソッドをカバーしていない場合、equals() を通じて 2 つのオブジェクトを比較するとき、実際には 2 つのオブジェクトが同じオブジェクトであるかどうかが比較されます。このとき、2つのオブジェクトを「==」で比較することと同じになります。

  • クラスのequals()メソッドをオーバーライドして、他のメソッドを通じて2つのオブジェクトが等しいかどうかをequals()に比較させることができます。通常のアプローチは、2 つのオブジェクトの內容が等しい場合、equals() メソッドは true を返し、それ以外の場合は fasle を返します。

以下は、上記の 2 つの狀況を説明する例です:

1.equals() メソッドをカバーしていないケース

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個相同內容的Person對象,
        // 再用equals比較它們是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比較結果:" + user1.equals(user2));
    }
 
    /**
     * @desc User類。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
    }
}

実行中結果:

false

結果分析:

「user1 と user2 が等しいかどうかを比較する」ために user1.equals(user2) を使用します。実際、Object.java の equals() メソッドは次のとおりです。呼び出されます。つまり、Called (user1==user2) です。

「p1とp2が同じオブジェクトかどうか」を比較します。 user1 と user2 の定義から、これらは同じ內容を持ちますが、2 つの異なるオブジェクトであるため、戻り結果は false であることがわかります。

(ビデオ チュートリアルの推奨: java ビデオ チュートリアル)

2.quals() メソッドのオーバーライド

上記の EqualsTest を変更し、equals( )メソッド:

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2個相同內容的Person對象,
        // 再用equals比較它們是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比較結果:" + user1.equals(user2));
    }
 
    /**
     * @desc User類。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
 
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
}

実行結果:

true

結果分析: EqualsTest.java で User の equals() 関數(shù)を書き直しました: 2 つの User オブジェクトの名前と年齢が等しい場合、 true を返します。したがって、実行結果は true を返します。

== 関數(shù)

"==: この関數(shù)は、2 つのオブジェクトのアドレスが等しいかどうかを判斷することです。これは、參照オブジェクトが、指定されたヒープ內のオブジェクトと同じであるかどうかを判斷するためであり、すべての新しいオブジェクトがヒープ內にあることがわかっています。オブジェクトへの參照はスタック、特にスタック フレームに格納されます。次のコード部分を見てみましょう:

public static void main(String[] args) {
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.println("user1.equals(user2):" + user1.equals(user2));
        System.out.println("user1==user2:" + (user1==user2));
}

出力結果:

user1.equals(user2):true
user1==user2:false

はヒープ ブロック內の 2 つのオブジェクトを指します領域が異なるため、「==」と比較すると false が返されます。

以上がequals()関數(shù)と「==」の機能は何ですか?の詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當する法的責任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)