2011-06-17 23 views
1

重複の可能性:
What's the difference between passing by reference vs. passing by value?
Java and C++ pass by value and pass by reference参照渡しとC++とJavaで値渡し

Javaは "値渡し" または "参照渡し" とは?

とは何ですか? はC++であり、cは "渡された値"または "passed by reference"ですか?

「パス渡し」と「パス渡し」の違いは何ですか?

+1

参照http://stackoverflow.com/questions/5922119/java-and-c-pass-by-value-and-pass-by-referenceとhttp://stackoverflow.com/questions/40480/is -java-pass-by-reference – bdonlan

+1

そして次回検索してください:) – bdonlan

+0

なぜ私の記事を閉じますか? –

答えて

5

Javaは値渡しですが、渡した値は参照になります。

C++では、値渡しか参照渡すかを選択します。 Cでは、あなたは常に値を渡します。参照のようなものはありません。同様のことをするためのポインタを渡す必要があります。

値渡しすると、関数は渡した変数のコピーを取得します。コピーを変更した場合、元の値は変わりません(ただし、渡された値自体が参照であったため、参照されるオブジェクトが変更される可能性があります)。

参照渡しの場合、関数は渡された実際の変数を取得します。関数がその変数を変更すると、関数に渡された変数が実際に変更されます。

3

Javaは「値渡し」です。常に。

C++では、参照渡しが許可されています。 Cのすべてが価値によって渡されます。

関数を参照して変数を渡すと、関数は呼び出し元の変数の値を変更できます。値渡しすると、関数は変数のコピーを取得します。

+3

Javaで参照されているオブジェクトの「値渡し」が** Reference **が値渡しであることを強調したいだけです。効果的には、実際には参照によって渡されます。 –

+1

*実は実際には参照渡しされています。* - ナア、正しいことはおそらくオブジェクトがまったく渡されないことでしょう。 – aioobe

-4

Javaは、基本型(int、double)の値渡しであり、Objectを継承するすべてのクラスの参照渡しです。

C++はあなたが好きです。

値渡しはパラメータのコピーを作成するので、関数内の変更はその関数内でのみ有効です。

参照渡しはコピーされないため、サブ関数内でそのパラメータに加えられた変更は、その関数外の値に影響します。

+0

+0:Javaは常に値渡しです。参照は値で渡すことができます。;) –

+1

"*オブジェクトを継承するすべてのクラスの参照渡し*。" - 違う。それは参考にも値渡しです。 – aioobe

+3

申し訳ありませんが、これは真実ではありません。参照は値によって渡されるため、渡されたオブジェクトで呼び出されるメソッドはすべて同じオブジェクト参照を使用しますが、関数内のパラメータの参照を変更すると、その変更は呼び出し元に反映されません。 'param.setBar()'はうまくいきます、 'param = new Foo()'は外部から目に見える影響を与えません。 – biziclop