Javaメソッドを参照し、参照によって渡された値を渡すためにこの2日間で見たとき、我々はすべてが、非常にシンプルに理解できる値を渡すことが、高霊ではありませんでしたC ++を知った人たちのもののために、参照渡しのためにどのように便利なああ - まだ、直接、直接パラメータの値を変更する「&」演算子を使用するように関数を書きます!!
しかし!!
Javaが参照によって渡されていない、唯一の値が渡されました
- 引数:実引数は、予め用意され、変数の割り当てが完了しました。スタックに割り当て。それはスタックの基本的なタイプに直接分配される場合は、オブジェクト参照型への参照ポインタを割り当てられている場合、ヒープ自体に割り当てられたスタック領域へのポインタを格納します。
- パラメータ:パラメータの形式は、スタック上に配布メソッド呼び出しの引数をコピーします。
- 値が渡される:メソッド呼び出しは、対応する仮パラメータにそれを実際のパラメータ値を渡し、受信したパラメータを元の値のコピーであり、メモリに格納された二つの等しい変数
- 参照を渡す:引数は、対応するパラメータへの転送メソッド呼び出しのアドレスであり、パラメータの引数が同じコンテンツを指し
だから、どのように我々はあなたがそれを変更したいデータを変更できますか?
Javaでは、データの2つの主要なタイプがあります。
図1に示すように、基本的なデータ・タイプ(整数、浮動小数点)、文字型(CHAR)を含む数値型、ロジックのタイプ(ブール)
2、参照データ型:クラス、インタフェース、配列
私たちは、その後、唯一の引数は変更されませんが、パラメータの値を変更し、我々は参照データ型に対して動作している場合、あなたは我々が(直接操作に対処することにより)変更したいデータを変更することができ、操作の基本的なデータ型を実施します
人々は他の方法を使用しての自然代わりに頭痛を参照する必要がように、我々はJavaで自由奔放としてC ++を好きではない、Java用のこのような簡単な操作メモリは、単純な要素であります -
ここでは、変更することが自分自身にそれを望むようにするために、最近参照するには、私のための2つの方法があります。
まず、アレイ動作を使用します。
私たちは、この機能を維持するように思われるのJavaのようにC ++では、配列とポインタが実際に同じであることを知っているので、変更は実際のトップに反映されるように、我々は、配列のために直接作業することができます。
コードは以下の通りであります:
パブリック クラスのHelloWorld { 公共 静的 ボイドメイン(文字列[]引数){ INT [] ARR = {1,2,3,4,5 }。 以下のために(int型 i = 0; iは<5; I ++ ){ System.out.print(ARR [I] +」 " )。 } のSystem.out.println(); 変更(ARR)。 以下のために(int型 i = 0; iは<5; I ++ ){ System.out.print(ARR [I] +」 " )。 } } パブリック 静的 ボイド変化(INT ARR []){ 用(int型 i = 0; iが5 <; Iは++ ){ 場合(ARR [I]%2 == 0 ){ ARR [I] * = 2 ; } } } }
(怠惰なブロガーを許し、同じ項目を繰り返し多くの時間を使用し.....遼ORZを叫び)
もちろん、我々は時間の配列を使用することはできません。
オブジェクトを作成する - このとき、より面倒な方法があります。。。
第二に、操作対象を使用。
オブジェクトは、参照データ型であるため、以下のように、我々は、直接データの値を変更することができます。
クラス数{ プライベート int型。 プライベート int型のB; パブリック番号(INT NUM1、INT NUM2){ この .A = NUM1。 この .B = num2の。 } 公共 ボイドShowNumber(){ System.out.printlnは( "A = "+ A +" B =" + B)。 } 公共 ボイドスワップ(){ int型 TEMP = この.A。 この .A = この.B。 この .B = 温度; } } パブリック クラスのHelloWorld { 公共 静的 ボイドメイン(文字列[]引数){ System.out.printlnは(「入力2つの数値を」)。 スキャナSC1 = 新しいスキャナ(System.in); スキャナSC2 = 新しいスキャナ(System.in); 番号num = 新しい番号(sc1.nextInt()、sc2.nextInt())。 num.ShowNumber(); num.Swap(); num.ShowNumber(); sc1.close(); sc2.close(); } }
これは、2つの方法、それです
おそらく、将来的には〜のペアを追加する新しい方法があるでしょう
その時も〜それを更新していきます