1:何が価値があるのか
つまり、メソッドが呼び出されると、渡されたパラメーターが値のコピーによって渡されることを意味します。例は次のとおりです。
public class temptest {private void test1(int a){// do something} public static void main(string [] args){temptest t = new Temptest(); int a = 3; t.test1(a); //ここで渡されたパラメーターは、値で通過することです}}}価値を通過することの重要な特性:渡されるのは価値のコピーです。つまり、それは通過後に互いに関係していません。
例は次のとおりです。
Public Class Temptest {private void test1(int a){a = 5; System.out.println( "test1 method a ="+a); } public static void main(string [] args){temptest t = new Temptest(); int a = 3; t.test1(a); //渡した後、test1メソッドの変数値の変更はa system.out.println( "main method a ="+a)に影響しません。 }}操作の結果は次のとおりです。
test1のa = 5メソッドa = 3メインメソッド
2:参照によって合格しているもの
メソッドが呼び出されたときに渡されたパラメーターを指し、渡されたパラメーターは参照によって渡されます。実際、渡された参照アドレスは、変数に対応するメモリ空間のアドレスです。
例は次のとおりです。
public class temptest {private void test1(a){} public static void main(string [] args){temptest t = new Temptest(); a a = new a(); t.test1(a); //ここで渡されるパラメーターAは、参照で通過することです}} class A {public int age = 0; }3:参照による通過の重要な特性
渡されるのは、値への参照です。つまり、ポイントを同じ参照(つまり、同じメモリ空間)に渡す前後の両方が意味します。
例は次のとおりです。
Public Class Temptest {private void test1(a){a.age = 20; age = "+a.age in System.out.println(" test1 method = "+a.age);} public static void main(string [] args){temptest t = new emtptest(); a = new a(); a.age = 10; t.test1(a); age ="+a.age in System.out.out.out.out.Out = "+A. }} class A {public int age = 0; }操作結果は次のとおりです。
TEST1メソッドで年齢= 20、メインメソッドでは年齢= 20
4:参照による通過プロセスを理解する - メモリ割り当て図
参照を通過するプロセスを正しく理解するには、メモリ割り当てのプロセスを理解することを学ぶ必要があり、メモリ割り当て図はこのプロセスを理解するのに役立ちます。
上記の例を使用して分析します。
(1):実行を開始し、ライン8を実行し、Aのインスタンスを作成し、メモリ割り当て図は次のとおりです。
(2):行9を実行し、インスタンスAで年齢の値を変更します。実行後のメモリ割り当て図は次のとおりです。
(3):行10を実行します。これは、メインメソッドの変数Aによって参照されるメモリスペースアドレスを、参照に従ってtest1メソッドの変数Aに渡すことです。注意:これら2つのA変数は完全に異なります。同じ名前にだまされないでください。
メモリの割り当ては次のとおりです。
参照によって渡されるため、つまり、メモリスペースのアドレスが渡されるため、転送が完了した後に形成された新しいメモリ図は次のとおりです。
言い換えれば、両方の変数が同じ空間を指します。
(4):行3を実行し、Test1メソッドの変数Aによって指定されたインスタンスAの年齢に値を割り当てます。完了後に形成された新しいメモリ図は次のとおりです。
この時点で、インスタンスAの年齢価値の変化は、test1メソッドによって引き起こされます
(5):行4を実行し、この時点でのメモリ図によると、テスト1メソッドで出力年齢= 20
(6):11行目を実行し、この時点でのメモリ図によると、メイン方法で出力年齢= 20
5:上記の例に変更します
上記の例を理解した後、一部の人々は、参照で渡された値が互いに影響を与えないことができますか?主な方法に影響を与えないTEST1メソッドの変更とは何ですか?
この方法は、test1メソッドで新しいインスタンスを使用することです。次の例に変更します。3番目の動作が新しく追加されています。
public class temptest {private void test1(a){a = new a(); // new line a.age = 20; System.out.println( "test1 method age ="+a.age); } public static void main(string [] args){temptest t = new Temptest(); a a = new a(); a.age = 10; t.test1(a); system.out.println( "main method age ="+a.age); }} class A {public int age = 0; }実行中の結果は次のとおりです。
TEST1メソッドで20歳= 20年齢=メインメソッドで10
この実行の結果が前の例と違うのはなぜですか?メモリ図を使用して理解する方が良いです。
6:もう一度参照して理解してください
(1):実行を開始し、9行目を実行し、Aのインスタンスを作成し、メモリ割り当て図は次のとおりです。
(2):ラン10は、インスタンスAで年齢の値を変更することです。実行後のメモリ割り当て図は次のとおりです。
(3):ランニングライン11は、メインメソッドの変数Aによって参照されるメモリスペースアドレスを、参照に従ってTest1メソッドの変数Aに渡すことです。注意:これら2つのA変数は完全に異なります。同じ名前にだまされないでください。
メモリの割り当ては次のとおりです。
参照によって渡されるため、つまり、メモリスペースのアドレスが渡されるため、転送が完了した後に形成された新しいメモリ図は次のとおりです。
言い換えれば、両方の変数が同じ空間を指します。
(4):行3を実行し、test1メソッドの変数Aの新しいインスタンスを再生します。完了後に形成された新しいメモリ図は次のとおりです。
(5):行4を実行して、Test1メソッドの変数Aによって指定された新しいインスタンスの年齢に値を割り当てます。完了後に形成された新しいメモリ図は次のとおりです。
注:現時点では、TEST1メソッドの変数Aの年齢は変更されますが、メインメソッドは変更されません。
(6):行5を実行し、この時点でのメモリ図によると、テスト1メソッドで出力年齢= 20
(7):行12を実行し、現時点でのメモリ図によると、出力メモリ図= 10に従ってメインメソッドの出力年齢= 10
7:説明
(1):「Javaでは、パラメーターの渡されが値によって渡されます」手段:値ごとに合格した値のコピーです。参照を通過すると、実際には参照アドレス値が渡されるため、値を通過すると呼ばれます。
(2):Javaでは、次の定義方法に従って基本的なタイプと文字列のみが値で渡され、その他は参照によって渡されます。二重引用符を使用して文字列を直接定義することです:string str = "java私立学校";
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。