参照の受け渡しと値の受け渡し

   値の転送は、(値渡し)関数で変更パラメータは、実際のパラメータに影響を与えない場合、実際のパラメータは、そう、関数に渡された関数のコピーを呼び出すときをいいます。
   参照渡して行う、それは機能の実際のパラメータに影響するパラメータを変更し、その後、関数を呼び出す際に、直接関数に渡される実引数に取り組むことを意味する(参照渡し)。
   JAVAでは値のみが渡され、参照は渡されませんアドレス値も値であり、アドレス値を渡すことは必ずしも参照渡しだけではありません。値の受け渡しと参照の受け渡しの違いは、受け渡されるものではありません。実際のパラメーターが仮パラメーターにコピーされるかどうかです。C言語ではリファレンス転送などのステートメントがありますが、JAVAでは同様の効果はありますが、リファレンス転送は本質的になく、同様のリファレンス転送の効果は本質的に値の転送です。
   int boolean char float doubleやその他の基本型などの基本型変数は、定義後にデータがスタックに格納されます。基本型変数には、値が渡されたときにのみ値が渡され、新しい変数自体は、値とプロトタイプが一致していることを除いて、他の関係はありません。したがって、基本型の変数転送は値転送です。
  これらのカプセル化されたタイプの文字列整数の場合、過去にstrを渡すことは、実際には次と同等です。

String str=“hello”;
String st=str;

"address"の値がここで渡されるため、st = strはstrが指すアドレスをstに割り当てるだけです。stとstrが同じアドレスを共有しているため、stが変更されるとstrも変更されるため、元の変数strはなぜですかまだ変化はありません。これには、StringやIntegrなどのカプセル化されたクラスのソースコードが含まれます。Stirngの基礎となる実装を見てください。

private final char value[];  

値は変更できない最後の定数であり、ソースコードにはsetメソッドがありません。つまり、値を変更できなくなると、通常は値を変更することは、実際にはヒープ内の新しいスペースと同等になります。 、新しいStringオブジェクトが作成され、変数のポインタが新しいオブジェクトを指すように変更されるため、値が変化します。
  ただし、クラスを定義する場合、メンバー変数がfinalとして定義されることはほとんどなく、setメソッドが設定されていないため、カスタムクラスが渡されるとヒープのポインターが渡され、メンバー変数は変更可能になります。転送効果(本質は値の転送です)。

java只有值传递的。
如果是基本数据类型,传递的就是实际的值。
如果是引用数据类型,传递的就是该引用的地址值。
162の元の記事を公開 58を賞賛 90,000ビュー

おすすめ

転載: blog.csdn.net/ThreeAspects/article/details/105615118