オブジェクトがメソッドのパラメーターとして渡されると、このメソッドはオブジェクトのプロパティを変更し、変更された結果を返すことができます。それで、それはここのバリューパスですか、それとも参照パスですか?
回答:値転送です。 Javaプログラミング言語は、値でパラメーターのみを渡します。オブジェクトインスタンスがパラメーターとしてメソッドに渡されると、パラメーターの値はオブジェクトの参照のコピーです。同じオブジェクトを指して、オブジェクトのコンテンツは呼び出されたメソッドで変更できますが、オブジェクトの参照(参照のコピーではありません)は変更されません。
Javaパラメーターは、プリミティブタイプであろうとリファレンスタイプであろうと、すべてのコピーを渡すことです(値を合格することは別のことですが、コピーを渡すことと、渡される値は通常、通過アドレスと比較して理解する方が良いです)。
パラメータータイプがプリミティブタイプの場合、渡されたものはこのパラメーターのコピー、つまり元のパラメーターの値であり、前述の合格値と同じです。関数でコピーの値が変更された場合、元の値は変更されません。
パラメータータイプが参照タイプの場合、この参照パラメーターのコピーが渡され、このコピーはパラメーターのアドレスを保存します。このコピーのアドレスが関数で変更されていないが、アドレス内の値が変更されている場合、関数内の変更は渡されたパラメーターに影響します。コピーのアドレスが新しいものなどの関数で変更されている場合、コピーは新しいアドレスを指します。現時点では、着信パラメーターは元のアドレスを指しているため、パラメーターの値は変更されません。
例:
public class paramtest {public static void main(string [] args){ / ** *テスト1:メソッドは数値パラメーターを変更できません * / system.out.println( "TripleValueのテスト:"); doubleパーセント= 10; System.out.println( "before:percent =" +パーセント); TripleValue(パーセント); system.out.println( "後:パーセント=" +パーセント); /** *テスト2:メソッドはオブジェクトパラメーターの状態を変更できます */system.out.println( "/ntesting triplesalary:");従業員ハリー=新しい従業員( "Harry"、50000); system.out.println( "before:salary =" + harry.getSalary());三脚(ハリー); system.out.println( "後:salary =" + harry.getSalary()); /** *テスト3:メソッドは新しいオブジェクトをオブジェクトパラメーターに添付できません */system.out.println( "/ntesting swap:");従業員A =新しい従業員( "Alice"、70000);従業員B =新しい従業員( "Bob"、60000); system.out.println( "before:a =" + a.getName()); system.out.println( "before:b =" + b.getname());スワップ(a、b); system.out.println( "後:a =" + a.getname()); system.out.println( "後:b =" + b.getname()); } private static void swap(従業員x、従業員y){従業員Temp = x; x = y; y =温度; System.out.println( "方法の終わり:x =" + x.getName()); System.out.println( "方法の終わり:y =" + y.getName()); } private static void triplesalary(従業員x){x.RaiseSalary(200); System.out.println( "方法の終わり:salary =" + x.getSalary()); } private static void triplevalue(double x){x = 3*x; System.out.println( "メソッドx ="+xの終わり); }}結果を表示:
TripleValueのテスト:メソッドxのパーセント= 10.0エンド= 30.0After:パーセント= 10.0テストトリプルズラリー:給与= 50000.0エンドの方法:給与= 150000.0After:給与= 150000.0テストスワップ:前:a = alicebefore:b = bobend:x = bob /wible end of of of of of of infible exhed of infible fise fise fise of of infible exhed a = alice //参照自体は後に交換されません:b = bob
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。