Javaでの値別転送の概要

4415 ワード

本文のリンクBackendへようこそNotes
まず,プログラム設計言語におけるパラメータを値でメソッド(または関数)に渡す専門用語を振り返る.値呼び出し(call by value)は、メソッドが呼び出し者によって提供された値を受信したことを示し、参照呼び出し(call by reference)は、メソッドが呼び出し者によって提供された変数アドレスを受信したことを示す.1つの方法は、転送参照に対応する変数値を変更することができ、転送値呼び出しに対応する変数値を変更することはできません.
Javaプログラミング言語は、常に値によって呼び出されます.つまり、メソッドは、パラメータ値のコピーを取得します.特に、メソッドは、渡されたパラメータ変数の内容を変更することはできません.
メソッドパラメータには、基本データ型と参照型の2つのデータ型があります.
基本データ型
public void tripleValue(double x) {
     
    x = x * 3; // 30
}
double percent = 10;
tripleValue(percent); // 10

上記のコードを見ると、Javaは値で渡されるため、tripleValueのxはpercentのコピーにすぎず、その変化はpercentとは独立しているため、percentの値を変更することはできません.
参照タイプ
public void tripleValue(Employee x) {
     
    x.salary = x.salary * 3; // 30
}
Employee harry = new Employee();
tripleValue(harry); // 10

上記のコードを見て、具体的な手順は以下の通りです.
  • xがharryの値に初期化されたコピー
  • x harryと共に参照するオブジェクトのsalaryは元の3倍
  • になる.
  • メソッドが終了すると、xパラメータは
  • を使用しなくなる.
    Javaプログラミング言語では、リファレンス呼び出しではなく値呼び出しがオブジェクトに適用されます.
    public void swap(Employee a, Employee b) {
         
        Employee temp = a;
        a = b;
        b = temp;
    }
    Employee x = new Employee();
    Employee y = new Employee();
    swap(x, y);
    

    上記のコードの実行が終了すると、swapメソッドが交換するのはx,yの値のコピーだけであるため、x,yに格納されているオブジェクト参照は変更されません.
    結論
    Javaのメソッドパラメータの使用状況をまとめます.
  • メソッドでは、基本データ型のパラメータを変更できません.
  • オブジェクトパラメータの状態を変更する方法
  • メソッドでは、オブジェクトパラメータに新しいオブジェクトを参照させることはできません.

  • Reference
  • Javaコア・テクノロジー・ボリューム