参照変数の属性値を変更できるのはなぜですか?以下の答えをご覧ください。
#java のデータ型
Java のデータ型は、基本型と参照型の 2 つのカテゴリに分類されます。これに対応して、変数も基本型と参照型の 2 つの型に分類されます。 基本型変数は元の値を保存します。つまり、それが表す値は値そのものです。参照型変数によって保存される値は参照値であり、「参照」 value" はメモリ空間のアドレスを指し、オブジェクト自体ではなく、オブジェクトへの参照を表します。オブジェクト自体は、参照値で表されるアドレスに格納されます。 基本的なタイプには、byte、short、int、long、char、float、double、Boolean、returnAddress が含まれます。 参照型には、クラス、インターフェイス型、配列が含まれます。Java には値の転送しかありません
日常のコーディングでは、次のような現象がよく見られます:1. 基本的な型パラメータの場合、メソッド内 本体内でパラメータを再割り当てしても、元の変数の値は変更されません。 2. 参照型パラメータの場合、メソッド本体内のパラメータへの参照を再割り当てしても、元の変数が保持する参照は変更されません。 3. パラメーターは、元の変数の値を変更せずにメソッド本体内で操作されます。 4. 参照型パラメータの場合、メソッド本体はパラメータが指すオブジェクトのプロパティを操作し、元の変数が指すオブジェクトのプロパティ値を変更します。 例:public class Main { private static void getMiddleOne(boolean b, Boolean boo, Boolean[] arr){ b = true; boo = new Boolean(true); arr[0] = true; } //测试 public static void main(String[] args) { boolean b = false; Boolean boo = new Boolean(false); Boolean[] arr = new Boolean[]{false}; getMiddleOne(b, boo, arr); System.out.println(b); System.out.println(boo.toString()); System.out.println(arr[0]); /** * output: * false * false * true */ } }
次の 2 点を理解していれば、上記の現象に答えることができます:
1. 基本的なデータ型value は値そのものなので、例の b の値は false です。ラッパー クラスが自動的にボックス化およびボックス解除するため、基本型と同じように処理できるため、例の boo の値は false です。 ; 配列は参照型なので、 arr 値は Boolean[] への参照です。 2. Java では、値の転送のみが行われ、参照の転送は行われないため、getMiddleOne メソッドに渡される 3 つのパラメーターは、b の値のコピー、boo の値のコピー、および arr の値のコピーです。 上記の 2 点から明らかですが、getMiddleOne メソッドで実行される b=true と boo = new Boolean(true) は、そのコピーに新しい値を代入するため、元の変数の値は変わりません。 ; 同様に、arr[0] = true は、arr のコピーが指す配列の最初の要素に true をコピーします。arr の値と arr のコピーの値は両方とも配列への参照であるため、コピーarr が指す配列と arr が指す配列は同じであるため、arr がコピーした配列の要素を変更すると、元の変数 arr にも影響します。概要
Java では、値のみが渡されます。基本型は値のコピーを渡し、参照型は参照のコピーを渡します。以上がJavaでのパラメータの受け渡し(値の受け渡しのみ、参照の受け渡しはなし)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。