ホームページ  >  記事  >  Java  >  Java における値の受け渡しと参照の受け渡しの違いの詳細な分析

Java における値の受け渡しと参照の受け渡しの違いの詳細な分析

WBOY
WBOYオリジナル
2024-01-30 08:11:06732ブラウズ

Java における値の受け渡しと参照の受け渡しの違いの詳細な分析

Java における値の受け渡しと参照の受け渡しの違いの詳細な分析

Java プログラミングでは、パラメーターを渡す状況と、パラメーターを渡す状況によく遭遇します。値渡しと参照渡しの 2 つの方法があります。これら 2 つの配信方法には、Java における異なる特性とアプリケーション シナリオがあります。

値による受け渡しとは、関数の呼び出し時に実パラメータの値を仮パラメータに渡すことを指します。関数内で仮パラメータを変更しても、実パラメータの値には影響しません。参照渡しとは、関数が呼び出されたときに、実パラメータの参照が仮パラメータに渡されることを意味します。関数内で仮パラメータを変更すると、実パラメータに影響します。

値の受け渡しと参照の受け渡しの違いをよりよく理解するために、簡単なサンプル コードを見てみましょう:

public class PassByValueDemo {

    public static void main(String[] args) {
        int num1 = 10;
        int num2 = 20;
        System.out.println("交换前:num1=" + num1 + ", num2=" + num2);
        swap(num1, num2);
        System.out.println("交换后:num1=" + num1 + ", num2=" + num2);

        Person person1 = new Person("Tom");
        Person person2 = new Person("Jerry");
        System.out.println("交换前:person1=" + person1 + ", person2=" + person2);
        swap(person1, person2);
        System.out.println("交换后:person1=" + person1 + ", person2=" + person2);
    }

    public static void swap(int a, int b) {
        int temp = a;
        a = b;
        b = temp;
    }

    public static void swap(Person p1, Person p2) {
        Person temp = p1;
        p1 = p2;
        p2 = temp;
    }
}

class Person {
    private String name;

    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

上記のコードでは、swap を渡します。メソッド 2 つの数値と 2 つの person オブジェクトの値を交換します。値の受け渡しの場合、swap メソッドが Person オブジェクトの数値と値を交換できることが期待されます。ただし、コードを実行すると、数値の値のみが交換され、Person オブジェクトの値は変更されていないことがわかります。

これは、Java の値転送では、実パラメータの値が仮パラメータにコピーされ、元の実パラメータに影響を与えることなく関数内の仮パラメータが変更されるためです。したがって、swap(int a, int b) メソッドでは、ab の値は、 の値に影響を与えることなく交換されます。 num1 および num2 の値。

swap(パーソン p1, パーソン p2) メソッドでの交換では、person1 と # の値を交換できることが期待されます。 ##人2。ただし、Java での参照の受け渡しは、実パラメータの参照を仮パラメータに渡すことなので、仮パラメータと実パラメータは同じオブジェクトを指します。交換プロセスでは、形式パラメータ p1p2 の参照のみを交換しましたが、実際のパラメータ person1person2# は変更しませんでした。 ## はオブジェクトを指しているため、交換は有効になりません。

Person

オブジェクトは、次のコードで正しく交換できます。 <pre class='brush:java;toolbar:false;'>public static void swap(Person p1, Person p2) { String temp = p1.getName(); p1.setName(p2.getName()); p2.setName(temp); }</pre>上記のコードでは、

getName()

と ## を呼び出します。 #setName() メソッドを使用して、Person オブジェクトの属性値を取得および変更し、正しいオブジェクト交換を実現します。 要約すると、値の受け渡しと参照の受け渡しは、Java における 2 つの異なるパラメーター受け渡しメソッドです。値渡しでは実際のパラメータの値は変更されませんが、参照渡しでは実際のパラメータが指すオブジェクトが変更されます。これら 2 つの配信方法を理解し、正しく使用することは、Java プログラミングにとって非常に重要です。

以上がJava における値の受け渡しと参照の受け渡しの違いの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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