teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

質問の追記に応じて加筆

2021/05/15 02:19

投稿

dodox86
dodox86

スコア9416

answer CHANGED
File without changes

2

質問の追記に応じて加筆

2021/05/15 02:19

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -1,3 +1,17 @@
1
1
  Javaのメソッドから見て、渡された引数は「仮引数」と言い、値を収める器、つまり変数は別物です。呼び出し側が参照を渡しても、渡された方はその値のコピーを**仮引数と言う別の器**で受け取っています。
2
2
 
3
- 12行目の`method1(array);`で`array`の参照の値は`method1`メソッドに確かに渡されます。ですが、`method1`で`int[] a`として受け取った`a`は呼び出し側の実引数である`array`の参照は入ってはいるものの、`a`と言う変数の器は別です。`a = other;`でその器に`other`の参照を代入しても、その別の器である`a`に収まった値が上書きされるだけです。呼び出し側の`array`には影響しません。ですので、結果`0`が出力されます。
3
+ 12行目の`method1(array);`で`array`の参照の値は`method1`メソッドに確かに渡されます。ですが、`method1`で`int[] a`として受け取った`a`は呼び出し側の実引数である`array`の参照は入ってはいるものの、`a`と言う変数の器は別です。`a = other;`でその器に`other`の参照を代入しても、その別の器である`a`に収まった値が上書きされるだけです。呼び出し側の`array`には影響しません。ですので、結果`0`が出力されます。
4
+
5
+ ----
6
+ **質問文中の[2021/05/15 06:51]の編集追記内容を読んで:**
7
+
8
+ > なぜメソッド1の取り側aが別物になりメソッド2のaは[]をつけたとたんおなじところを参照するようになるかが納得いきません
9
+
10
+ コードの見た目、字面に惑わされてしまっているのではないでしょうか。
11
+
12
+ 先の回答でも同じようなことを書きましたが、`int[] a;`と宣言された場合、`a`で「`int`型の配列への参照を格納する`a`と言う名前の変数」そのものを表し、`a[0]`で「`a`と言う名前の変数が保持する参照が指し示す`int`型の配列要素`[0]`」そのものを表します。これは単に、**Javaの文法**の話です。
13
+ (とは言え「`int[] a = {0, 1, 2};`の時、`a`は`int`の配列を表す。」などど表現するときもあるので、話の文脈次第なところはありますので注意を要します)
14
+
15
+ `a = null;`や`a[0] = 1:`などのように`=`演算子で代入操作が行われるとき、左側(左辺と呼びます)の記載内容に応じて右側(右辺)で取り扱うべき型の解釈もJavaの文法に沿って変わります。
16
+
17
+ 試験対策としては今、見分けられないとまずいと思えてしまう焦りは理解できるのですが、ある程度実際にご自身でいくつもコードを書き、「これはどういったことなのか」と考え続けていると、意外と素直に理解できる時がやって来るものです。あまり積極的な助言でなくてごめんなさい。

1

表現を修正

2021/05/15 02:19

投稿

dodox86
dodox86

スコア9416

answer CHANGED
@@ -1,3 +1,3 @@
1
1
  Javaのメソッドから見て、渡された引数は「仮引数」と言い、値を収める器、つまり変数は別物です。呼び出し側が参照を渡しても、渡された方はその値のコピーを**仮引数と言う別の器**で受け取っています。
2
2
 
3
- 12行目の`method1(array);`で`array`の参照の値は`method1`メソッドに確かに渡されます。`method1`で`int[] a`として受け取った`a`は呼び出し側の実引数である`array`の参照は入ってはいるものの、`a`と言う変数の器は別です。`a = other;`でその器に`other`の参照を代入しただけでは、呼び出し側の`array`には影響しません。ですので、結果`0`が出力されます。
3
+ 12行目の`method1(array);`で`array`の参照の値は`method1`メソッドに確かに渡されます。ですが、`method1`で`int[] a`として受け取った`a`は呼び出し側の実引数である`array`の参照は入ってはいるものの、`a`と言う変数の器は別です。`a = other;`でその器に`other`の参照を代入しても、その別の器である`a`に収まっ値が上書きされるだけです。呼び出し側の`array`には影響しません。ですので、結果`0`が出力されます。