methods - java 8 pass method as parameter - Javaは "pass-by-reference "か "pass-by-value "か?

java argument / java / parameter-passing / pass-by-reference / pass-by-value

私はいつもJavaが参照渡しを使うと思っていました。

22 revs, 18 users 14%



Answer #1

C++のパス・バイ・リファレンスの例

using namespace std;
#include <iostream>

void change (char *&str){   // '&'はこれを参照パラメータにします
    str = NULL;
}

int main()
{
    char *str = "not Null";
    change(str);
    cout<<"str is " << str;      // ==> strは<null>
}

Javaパス「Java参照」の値例

public class ValueDemo{

    public void change (String str){
        str = null;
    }

     public static void main(String []args){
        ValueDemo vd = new ValueDemo();
        String str = "not null";
        vd.change(str);
        System.out.println("str is " + str);    // ==> strはnullではありません!!
                                                //「str」が
                                                //参照渡し、それ
                                                //後はNULLになります
                                                // change()を呼び出します。
     }
}

パスカルでは、参照によって渡されるパラメーターは「varパラメーター」と呼ばれます。以下のプロシージャsetToNilでは、パラメータ「ptr」の前にあるキーワード「var」に注意してください。このプロシージャにポインタが渡されると、参照によって渡されます。動作に注意してください。このプロシージャがptrをnilに設定すると(つまり、pascalはNULLを表します)、引数をnilに設定します。Javaではこれを行うことはできません。

program passByRefDemo;
type 
   iptr = ^integer;
var
   ptr: iptr;

   procedure setToNil(var ptr : iptr);
   begin
       ptr := nil;
   end;

begin
   new(ptr);
   ptr^ := 10;
   setToNil(ptr);
   if (ptr = nil) then
       writeln('ptr seems to be nil');     { ptr should be nil, so this line will run. }
end.