[解決済み】Javaで配列は値で渡されるのか、参照で渡されるのか?[重複しています。]
質問
配列は プリミティブ型 は、Javaでは はオブジェクトでもない ということは、値で渡されるのか、参照で渡されるのか?配列が何を含むかによって、例えば参照やプリミティブ型が変わるのでしょうか?
どのように解決するのですか?
あなたの質問は、誤った前提に基づいています。
<ブロッククオート配列はJavaのプリミティブ型ではありませんが、オブジェクトでもありません ... "
実際、Javaのすべての配列は
は
オブジェクト
1
. すべての Java 配列タイプには
java.lang.Object
のすべてのメソッドの実装を継承しています。
Object
APIを使用します。
...で、それらは値で渡されるのか、参照で渡されるのか?配列が何を含むかによって、例えば参照やプリミティブ型が異なるのでしょうか?
短く答えてください。1)値で合格、2)差はない。
長文です。
すべてのJavaオブジェクトと同様に、配列は値で渡されます... しかし、値は配列への参照です。 したがって、呼び出されたメソッドで配列のセルに何かを代入すると、呼び出し元が見ているのと同じ配列オブジェクトに代入することになります。
これは参照渡しではありません。 リアル 参照渡しでは 変数のアドレス . とは リアル 参照渡しでは、呼び出されたメソッドはそのローカル変数に代入することができ、これによって呼び出し側の変数が更新されることになります。
しかし、Javaではそうではない。 Javaでは、呼び出されたメソッドは配列の内容を更新でき、配列参照のコピーも更新できますが、呼び出し側の配列参照を保持する呼び出し側の変数を更新することはできないのです。 したがって......Javaが提供するものは参照渡しではありません。
参照渡しと値渡しとの違いを説明したリンクはこちらです。 上記の私の説明が理解できない場合、あるいは用語に異論があると感じる場合、あなたは べきである を読んでみてください。
- http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/topic/com.ibm.xlcpp8a.doc/language/ref/cplr233.htm
- http://www.cs.fsu.edu/~myers/c++/notes/references.html
関連するSOの質問です。
歴史的な背景
pass-by-referenceは元々call-by-referenceで、FORTRANの引数渡しセマンティクス(call-by-reference)とALGOL-60のそれ(call-by-value, call-by-name)を区別するために使われた言葉であった。
-
call-by-valueでは、引数式は値として評価され、その値は呼び出されたメソッドにコピーされます。
-
参照渡しの場合、引数式の一部が評価され、呼び出し側のメソッドに渡される "lvalue" (つまり、変数または配列要素のアドレス)が作成されます。 呼び出し側のメソッドは、その変数や要素を直接読み込んで更新することができます。
-
call-by-nameでは、実際の引数式は呼び出し側のメソッドに渡され(!!)、そのメソッドはそれを複数回評価することができます(!!)。 これは実装が複雑で、非常に理解しにくいコードを書くために使われる(悪用される)可能性がありました。 call-by-nameはAlgol-60でしか使われなかった(ありがたいことだ!)。
アップデイト
実は、Algol-60のcall-by-nameは、ラムダ式をパラメータとして渡すのに似ている。 このラムダ式は、実装レベルではサンクと呼ばれていました。 それとなく 呼び出したプロシージャ/関数のスコープ内にある変数の状態を変更する。 これが、この関数を理解しにくくしている要因の一つです。 (Wikipediaの ジェンセンの装置 などがある)
1. リンク先のQ&Aには何も書かれていない( Javaにおける配列とそのメモリへの格納方法 ) は、配列がオブジェクトではないことを述べているか、暗に示している。
関連
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] ORA-01654: インデックスを拡張できません。
-
[解決済み] Javaにおけるシンボリック参照
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaで配列に特定の値が含まれているかどうかを判断するにはどうすればよいですか?
-
[解決済み] Java の配列を表示する最も簡単な方法は何ですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
-
[解決済み] JavaScriptで配列を比較する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] JVMフラグCMSClassUnloadingEnabledは、実際に何をするのですか?
-
[解決済み] Eclipse デフォルトのフォント名
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] Java UnknownFormatConversionException
-
[解決済み] raw 型のメンバへのアンチェックの呼び出し
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] SubclipseとJavaHLのインストールで頭を悩ます
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について