ホームページ  >  記事  >  Java  >  Java が値渡しか参照渡しかを分析してみましょう。

Java が値渡しか参照渡しかを分析してみましょう。

WBOY
WBOY転載
2022-05-12 18:40:221831ブラウズ

この記事では、java に関する関連知識を提供します。主に、Java が値渡しか参照渡しかに関する関連問題を紹介します。一緒に見てみましょう。お役に立てば幸いです。みんなに、役に立ちました。

Java が値渡しか参照渡しかを分析してみましょう。

推奨学習: 「java ビデオ チュートリアル

この記事の目的: Java 言語が値渡しであるかどうかを確認します。参照渡しとパラメータ渡しの Java 実装原則。


問題の導入:
最初にコード セグメントを読んでください:

public static void main(String[] args){
    Person p=new Person("张三");
    f(p);
    System.out.println("实参:"+p);}public static void f(Person p){
    p.name="李四";
    System.out.println("形参:"+p);}

実行結果:
仮パラメータ :person{name="李思"}
実際のパラメータ :person{name="李思"}

オブジェクト変数をメソッドに渡し、次に、メソッド Attributes 内でオブジェクトを変更し、実パラメータと仮パラメータを出力します。表面上、実パラメータと仮パラメータの値は変更されています。Java は参照転送もサポートしていますか?


答えは次のとおりです。Java 言語は値の転送のみをサポートし、参照の転送はサポートしません。

# #Java パラメータの転送方法を検証する前に、まず、関数の値の受け渡しと参照の受け渡しの違いを理解する必要があります。

    値による受け渡しとは、実際のパラメータのコピーをコピーして、それらを関数に渡すことを意味します。関数を呼び出すときに関数を変更するため、パラメータを変更しても実際のパラメータには影響しません。
  • 参照渡しとは、関数呼び出し時に実パラメータのアドレスを直接関数に渡すことを指し、関数内でパラメータを変更すると実パラメータに影響を与えます。

値の受け渡しと参照の受け渡しの違いは、仮パラメータの変更が実際のパラメータに影響を与えるかどうかであることがわかります。


1. データ型の基本パラメータの受け渡し

基本データ型をメソッドに渡し、メソッド内の仮パラメータの値を変更します。その結果、仮パラメータの変更は、実際のパラメータ.

public static void main(String[] args){
    int a=1;
    f(p);
    System.out.println("实参:"+a);}public static void f(int a){
    a=2;
    System.out.println("形参:"+a);}
2. 参照データ型のパラメータの受け渡し

質問で紹介された例では、仮パラメータの変更が実際のパラメータに影響を与えるように見えますが、新しいオブジェクトを作成して仮パラメータに割り当て、実際のパラメータと仮パラメータを出力しますが、この 2 つは相互に影響しません。これは、Java が参照転送に準拠していないことを意味します。

public static void main(String[] args){
    Person p=new Person("张三");
    f(p);
    System.out.println("实参:"+p);}public static void f(Person p){
    p=new Person("李四");
    System.out.println("形参:"+p);}

3. 原則

なぜこれが起こるのかを理解する必要があります現象、Java の背後にある基本原則を理解する必要があります:

JVM は多くの領域、オブジェクトに分かれています。作成したデータ型はヒープに配置され、基本データ型とローカル変数はスタックに配置されます。基本データ型を渡す場合、データのコピーが作成されてメソッドに渡されるため、実際のパラメータは影響を受けません。図に示すように、仮パラメータを変更します。

Java が値渡しか参照渡しかを分析してみましょう。 オブジェクトはヒープ領域に配置されているため、このオブジェクトを操作するにはオブジェクトの参照のみを使用できます。
オブジェクト参照がメソッドに渡されると、参照のコピーが実際に作成され、同時に同じオブジェクトを指します。オブジェクトが仮パラメータ参照を通じて操作されると、実際のパラメータが変更されたかのようになります実際には、オブジェクトの内容は変更されていますが、オブジェクト変数は変更されておらず、実際のパラメータ自体は変更されていないため、質問で紹介されている例は理解するのが難しくありません。
仮パラメータを再割り当てしても、実パラメータは何の影響も受けません。この時点では、実パラメータと仮パラメータはすでに 2 つの異なるオブジェクトを指しています。

Java が値渡しか参照渡しかを分析してみましょう。
したがって、Java は値の転送のみをサポートします。


推奨される学習: 「Java ビデオ チュートリアル

以上がJava が値渡しか参照渡しかを分析してみましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。