相違点: 1. 値転送ではコピーが作成されますが、参照転送ではコピーが作成されません。 2. 値転送中に関数内で元のオブジェクトを変更することはできませんが、関数内で元のオブジェクトを変更できます。リファレンス転送中。値による受け渡しとは、関数呼び出し時に実際のパラメーターのコピーが関数に渡されることを意味し、関数内でパラメーターが変更されても実際のパラメーターは影響を受けません。参照による受け渡しとは、実際のパラメーターがコピーされることを意味します。関数を呼び出すとき、アドレスは関数に直接渡されるため、関数内のパラメーターを変更すると実際のパラメーターに影響します。
実際のパラメータと形式的なパラメータ
Java でメソッドを定義するときにパラメータを定義できることは誰もが知っています。たとえば、Java の main メソッド、public static void main(String[ ] args) ですが、ここでの args はパラメータです。プログラミング言語ではパラメータは仮パラメータと実パラメータに分けられます。仮パラメータ: 関数名と関数本体を定義するときに使用されるパラメータで、関数の呼び出し時に渡されるパラメータを受け取ることが目的です。
実際のパラメータ: パラメータ化された関数を呼び出すとき、呼び出し元の関数と呼び出された関数の間にはデータ転送関係が存在します。呼び出し関数内で関数を呼び出す場合、関数名の後の括弧内のパラメータを「実パラメータ」と呼びます。
public static void main( String[ ] args) { ParamTest pt = new ParamTest(); pt.sout( "Hollis");//实际参数为Hollis } public void sout( String name) {/!形式参数为name system.out.println(name); }実際のパラメータは次のとおりです。仮引数とは、引数付きのメソッドを呼び出すときに実際に渡される内容であり、実引数の内容を受け取るために使用される引数です。
値の受け渡しと参照の受け渡し
前述したように、パラメーター化された関数を呼び出すと、実際のパラメーターが仮パラメーターに渡されます。ただし、プログラミング言語では、この転送処理には、値による転送と参照による転送の 2 つのケースがあります。プログラミング言語で値渡しと参照渡しがどのように定義され、区別されるかを見てみましょう。値の受け渡しとは、関数を呼び出すときに実際のパラメーターのコピーを関数にコピーすることを指します。これにより、関数内でパラメーターが変更されても、実際のパラメーターは影響を受けません。
参照渡しとは、関数呼び出し時に実パラメータのアドレスを直接関数に渡すことを指し、関数内でパラメータを変更すると実パラメータに影響を与えます。
public static void main( String[] args) { ParamTest pt = new ParamTest(); int i = 10; pt.pass(i); System.out.println( "print in main , i is " +i); } public void pass(int j){ j = 20; system.out.println( "print in pass , j is " + j); }上記のコードでは、パス メソッドのパラメーター j の値を変更し、そのパラメーターの値をパス メソッドとメイン メソッドにそれぞれ出力します。出力結果は次のとおりです。
print in pass , j is 20 print in main , i is 10pass メソッド内で i の値を変更しても、実際のパラメータ i の値は変更されないことがわかります。したがって、上記の定義に従って、誰かが「Java のメソッド受け渡しは値受け渡しである」という結論に達しました。
しかし、すぐに疑問を呈する人も出てきました(笑、だから安易に結論を出さないでください)。次に、次のコードを移動します。
public static void main(String[ ] args) { ParamTest pt = new ParamTest(); User hollis = new User(); hollis.setName( "Hollis"); hollis.setGender("Male"); pt.pass(hollis); system.out.println( "print in main , user is " + hollis);}public void pass(User user) { user.setName( "hollischuang"); System.out.println( "print in pass , user is " + user);}もパス メソッドであり、パラメータの値もパス メソッド内で変更されます。出力結果は以下のようになります:
print in pass , user is User{name='hollischuang', gender='Male '} print in main , user is User{name='hollischuang' , gender='Male '}passメソッド実行後、実パラメータの値が変更されます 上記の参照渡しの定義に従い、実パラメータの値が変更されます。これは参照渡しと呼ばれるものではないでしょうか?したがって、上記の 2 つのコードに基づいて、誰かが新しい結論に達しました。Java メソッドでは、通常の型を渡す場合は値によって渡され、オブジェクト型を渡す場合は参照によって渡されます。
ただし、この記述は依然として間違っています。私の言うことが信じられない場合は、パラメーターの型がオブジェクトである次のパラメーター転送を見てください。
public static void main( string[] args) { ParamTest pt = new ParamTest(); string name = "Hollis"; pt.pass(name ) ; System.out.println( "print in main , name is " + name); } public void pass(string name) { name = "hollischuang"; system.out.println( "print in pass , name is " + name); }上記のコードの出力結果は
print in pass , name is hollischuangprint in main , name is Hollisです。これはどういう説明ですか?オブジェクトも渡されますが、元のパラメータは The value has not been modified. 転送されたオブジェクトが再び値転送になっている可能性はありますか?
Java での値転送
上記では、結果が異なることを示すために 3 つの例を挙げました。これが、多くの初心者だけでなく、多くの上級プログラマさえも Java の転送タイプについて混乱している理由です。実は、私が言いたいのは、上記の考え方は間違っていないのですが、コード例には問題があるということです。さあ、このコンセプトの重要なポイントを概説してから、本当に適切な例をいくつか挙げてみましょう。値の受け渡しとは、関数を呼び出すときに実際のパラメーターのコピーを関数にコピーすることを指します。これにより、関数内でパラメーターが変更されても、実際のパラメーターは影響を受けません。
参照渡しとは、関数呼び出し時に実パラメータのアドレスを直接関数に渡すことを指し、関数内でパラメータを変更すると実パラメータに影響を与えます。
値による受け渡し |
参照による受け渡し | |
---|---|---|
コピーは作成しません | すべて | |
元のオブジェクトは関数で変更できます |
以上がJavaの値渡しと参照渡しの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ホットトピック









